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

Re-format matched items into two columns

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

我有一个基因列表和它们所在的细胞类型列表。我想创建一个网络交互 table 来显示它们所表达的细胞类型之间的交互,最好使用我在过去一天左右一直在尝试解决的 Cytoscape,但现在我只是想重新格式化我的数据,为此我需要将我的单元格类型分为两列。

下面是我当前单个基因数据的一个例子,它在 4 种细胞类型中,但显然我有几千个完整的基因 table,每个基因都可以只在一个细胞中类型,或多个(不总是 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","Tubule","Cardiomyocyte","Glandular" )
GENENAME <- c("CRYM","CRYM","CRYM","CRYM","ABC","ABC","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