将匹配项重新格式化为两列
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
抱歉,如果这是一个重复的问题,但我什至不能完全确定使用什么关键字来搜索这个问题。
我有一个基因列表和它们所在的细胞类型列表。我想创建一个网络交互 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