我有6个数据帧:
DvE.+
DvE.-
DvS.+
DvS.-
EvS.+
EvS.-
他们都有类似的结构:
gene FDR log2FC annotation
10 c10001_g1_i1|m.32256 4.638831e-02 -0.9888892 [Genbank]glutaredoxin/malate transporter fusion protein [Chlamydomonas reinhardtii]
33 c10006_g3_i4|m.32310 7.826191e-07 -1.3364432 [Tigrfam]ChlG: chlorophyll synthase ChlG
47 c10010_g1_i4|m.32346 8.609296e-15 1.9188013 [Genbank]conserved unknown protein [Ectocarpus siliculosus]
48 c10010_g1_i4|m.32348 5.625766e-09 1.8240089 [Genbank]hypothetical protein THAOC_07134 [Thalassiosira oceanica]
81 c10018_g2_i1|m.32429 2.008500e-04 -0.9899947
89 c10020_g1_i2|m.32459 4.930879e-04 -1.1283138 [Pfam]Zinc-binding dehydrogenase
我想比较每个数据帧中存在的基因(列“基因”中的所有字符串),看看哪些存在于多个数据帧中,以便在比较之后,我会得到一个新的数据帧告诉我哪个基因存在于哪个数据帧中,例如:
gene DvE.+ DvE.- DvS.+ DvS.- EvS.+ EvS.-
c10001_g1_i1|m.32256 0 1 1 0 0 0
c10010_g1_i4|m.32348 1 0 0 0 1 0
其中0和1表示存在或不存在。
输出不一定要看起来像这样,或者使用0和1s,但是很容易分辨哪个基因出现在哪个数据帧中。
答案 0 :(得分:0)
我要做的第一件事就是将dfs重命名为“合法”的R名称,例如:
等等。
然后我会得到所有基因的列表(我将仅使用2个假设数据帧进行此演示);
all.genes <- unique(c(DvE.plus$gene, DvE.minus$gene))
然后我为了方便而重新组合列表中的数据帧
my.dfs <- list(DvE.plus = DvE.plus, DvE.minus = DvE.minus)
然后初始化结果数据框
options(stringsAsFactors = FALSE)
result.df <- data.frame(gene=character(0), DvE.plus = numeric(0),
DvE.minus = numeric(0))
使用以下循环我会得到我想要的东西:
for(gene.num in seq_along(all.genes)) {
result.df[gene.num, "gene"] <- all.genes[gene.num]
for(df.name in names(my.dfs)) {
result.df[gene.num,df.name] <- all.genes[gene.num] %in% my.dfs[[df.name]]$gene
}
}
结果数据框如下所示:
result.df
gene DvE.plus DvE.minus
1 c10001_g1_i1|m.32256 1 0
2 c10006_g3_i4|m.32310 1 0
3 c10010_g1_i4|m.32346 1 0
4 c10010_g1_i4|m.32348 0 1
5 c10018_g2_i1|m.32429 0 1
6 c10020_g1_i2|m.32459 0 1