微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将匹配项重新格式化为两列

如何解决将匹配项重新格式化为两列

对不起,如果这是一个重复的问题,但我什至不完全确定使用什么关键字来搜索这个问题。

我有一个基因列表和一个发现它们的细胞类型列表。我想创建一个网络交互表来显示它们所表达的细胞类型之间的交互,最好使用 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 举报,一经查实,本站将立刻删除。