如何解决将匹配项重新格式化为两列
对不起,如果这是一个重复的问题,但我什至不完全确定使用什么关键字来搜索这个问题。
我有一个基因列表和一个发现它们的细胞类型列表。我想创建一个网络交互表来显示它们所表达的细胞类型之间的交互,最好使用 Cytoscape,我在最后一天左右一直试图解决这个问题,但现在我只是想重新格式化我的数据,为此,我需要将我的单元格类型分成两列。
我当前单个基因数据的一个例子如下,它有 4 种细胞类型,但显然我在完整表中有几千个基因,每个基因可以只在一种细胞类型中,也可以在多个(不是总是 4)
GENENAME CellType
CRYM Epithelial
CRYM Tubule
CRYM Cardiomyocyte
CRYM Glandular
我想要的是重新格式化上述数据以显示单元格类型之间的联系,即重新格式化为这样的:
GENENAME CellType1 CellType2
CRYM Epithelial Tubule
CRYM Epithelial Cardiomyocyte
CRYM Epithelial Glandular
CRYM Tubule Cardiomyocyte
CRYM Tubule Glandular
CRYM Cardiomyocyte Glandular
每种单元格类型最终出现在哪一列对于进一步分析无关紧要,但最好避免反向重复。但是我无法弄清楚如何以这种方式重新格式化数据。有人可以帮忙吗?
我相信我应该能够将这种两列格式的数据加载到 Cytoscape 中以创建网络分析,并删除其中基因数量非常少的链接。
解决方法
不是最优雅的解决方案,但我走了
基本上第一步是过滤每个 GENENAME 的步骤,然后我创建一个循环来收集所有 CellType2 并继续附加它们。
library(dplyr)
CellType <- c("Epithelial","Tubule","Cardiomyocyte","Glandular","Epithelial","Glandular" )
GENENAME <- c("CRYM","CRYM","ABC","ABC")
df = data.frame(GENENAME=GENENAME,CellType=CellType)
df_full = c()
for (i in unique(df$GENENAME)){
df_temp = filter(df,GENENAME==i)
all_match = c()
for (k in 1:nrow(df_temp)){
anchor = df_temp[k,"CellType"] # This is the CellType1
pair = df_temp[k:nrow(df_temp),"CellType"] # Find all the CellType2
match = expand.grid(anchor,pair) #Create all combination
all_match = rbind(all_match,match) #Append result
}
all_match = cbind(i,all_match) # Add the GENENAME information
df_full = rbind(df_full,all_match)
}
result = filter(df_full,Var1!=Var2) #Remove case when CellType1 == CellType2
print(result)
i Var1 Var2
1 CRYM Epithelial Tubule
2 CRYM Epithelial Cardiomyocyte
3 CRYM Epithelial Glandular
4 CRYM Tubule Cardiomyocyte
5 CRYM Tubule Glandular
6 CRYM Cardiomyocyte Glandular
7 ABC Epithelial Tubule
8 ABC Epithelial Cardiomyocyte
9 ABC Epithelial Glandular
10 ABC Tubule Cardiomyocyte
11 ABC Tubule Glandular
12 ABC Cardiomyocyte Glandular
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。