R:比较多个数据帧中是否存在字符串

R:比较多个数据帧中是否存在字符串,r,comparison,dataframe,R,Comparison,Dataframe,我有6个数据帧: DvE.+ DvE.- DvS.+ DvS.- EvS.+ EvS.- 它们都有相似的结构: gene FDR log2FC annotation 10 c10001_g1_i1|m.32256 4.638831e-02 -0.9888892 [Genban

我有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列中所有字符串的基因,以查看多个数据帧中存在哪些基因,这样在比较之后,我会得到一个新的数据帧,告诉我哪个基因存在于哪个数据帧中,例如:

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和1,但可以很容易地判断哪个基因存在于哪个数据帧中。

我要做的第一件事是将dfs重命名为合法的R名称,例如:

DvE.plus 差分 等等

然后我会得到所有基因的列表,我将只使用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