将一个数据框的每一列与另一数据框列进行比较,并将每个结果重叠打印到单独的文件中

鲍勃

我想将一个数据框的每一列与另一数据框列进行比较,并将每个结果重叠部分打印到单独的文件中。

我从两个测试数据集开始:

df1 <- data.frame("x" = c("a_b", "c_d", "e_f/c_f", "g_h"),
                  "y" = c(9,2,1,4),
                  "z" = c(7,5,8,5))
df2 <- data.frame("m" = c("c_f", "x_y"),
                  "n" = c("a_b", "x_y"))

并使用for循环获取结果。

for (i in colnames(df2)){ 
  ccc<-df1[grep(paste(df2[,i], collapse = "|"), df1$x), ]
  write.csv(ccc, file = paste(i, ".csv", sep=""))
}

一切看起来都很好。

现在,我在完整的数据集中尝试相同的循环(下面是修改的df1和df2):

df1<- structure(list(BGC_Accession = structure(c(1L, 1L, 1L, 2L), .Label = c("BGC0000647", 
"BGC0000984"), class = "factor"), Genbank_ID = structure(c(1L, 
3L, 2L, 4L), .Label = c("GCA_000202835", "GCA_000219295", "GCA_000964345", 
"GCA_003029685"), class = "factor"), BGC_Class = structure(c(2L, 
2L, 2L, 1L), .Label = c("NRP/Polyketide", "Terpene"), class = "factor"), 
    BGC_Start = c(2093957L, 1L, 1L, 2656134L), BGC_End = c(2115021L, 
    4440L, 4186L, 2721658L), Product = structure(c(1L, 1L, 1L, 
    2L), .Label = c("Carotenoid", "Delftibactin"), class = "factor"), 
    Similarity = structure(c(1L, 1L, 1L, 1L), .Label = "100%", class = "factor"), 
    Species_name = structure(c(1L, 4L, 2L, 3L), .Label = c("Acidiphilium_multivorum", 
    "Acidiphilium_sp_PM", "Acidovorax_avenae/Acidovorax_avene", 
    "Acinetobacter_baumannii"), class = "factor"), Kingdom = structure(c(1L, 
    1L, 1L, 1L), .Label = "k__Bacteria", class = "factor"), Phylum = structure(c(1L, 
    1L, 1L, 1L), .Label = "p__Proteobacteria", class = "factor"), 
    Class = structure(c(1L, 1L, 1L, 2L), .Label = c("c__Alphaproteobacteria", 
    "c__Betaproteobacteria"), class = "factor"), Order = structure(c(2L, 
    2L, 2L, 1L), .Label = c("o__Burkholderiales", "o__Rhodospirillales"
    ), class = "factor"), Family = structure(c(1L, 1L, 1L, 2L
    ), .Label = c("f__Acetobacteraceae", "f__Comamonadaceae"), class = "factor"), 
    Genus = structure(c(1L, 1L, 1L, 2L), .Label = c("g__Acidiphilium", 
    "g__Acidovorax"), class = "factor"), Species = structure(c(1L, 
    1L, 2L, 3L), .Label = c("s__Acidiphilium_multivorum", "s__Acidiphilium_sp_PM", 
    "s__Acidovorax_avenae"), class = "factor")), class = "data.frame", row.names = c(NA, 
-4L))
df2<- structure(list(Gut_SRS011111 = structure(c(2L, 1L, 1L), .Label = c("", 
"Actinobaculum_unclassified"), class = "factor"), Gut_SRS011269 = structure(c(3L, 
1L, 2L), .Label = c("Acidiphilium_multivorum", "Acinetobacter_baumannii", 
"Clostridium_citroniae"), class = "factor"), Gut_SRS011355 = structure(c(2L, 
3L, 1L), .Label = c("", "Acidovorax_avene", "Streptococcus_gordonii"
), class = "factor")), class = "data.frame", row.names = c(NA, 
-3L))

使用上面的脚本:

for (i in colnames(df2)){ 
  overlap_data<-df1[grep(paste(df2[,i], collapse = "|"), df1$Species_name), ]
  write.csv(overlap_data, file = paste(i, ".csv", sep=""))
}

似乎只有三个重叠的列之一(在df2中)给出了正确的结果。例如,在df2的第一列中,与df1没有重叠,因此应提供空白结果文件。第二列输出文件看起来正常。在第三个文件中,我应该得到一个重叠,而不是输出文件中给出的四个重叠。

我究竟做错了什么?

谢谢你的耐心!

杰伊

问题似乎是空""单元格,应该是NA

df2[df2 == ""] <- NA

现在,grep应该工作了。在这里使用lapply而不是for循环:

invisible(lapply(names(df2), function(x) {
  rr <- df1[grep(paste0(df2[,x], collapse= "|"), df1$Species_name), ]
  write.csv(rr, file = paste(x, ".csv", sep=""))
}))

(为invisible避免不必要和无聊的输出到控制台,您也可以将其省略。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将数据框中的一列与另一数据框中的两列进行比较

来自分类Dev

如何将一个数据框中的整个列替换为另一数据框中的另一列?

来自分类Dev

如何有效地将一个Pandas数据框的每一列与另一数据框的每一列相乘?

来自分类Dev

根据另一数据框的行对一个数据框的列进行子集

来自分类Dev

在R中另一数据框中的另一列的基础上在一个数据框中创建一列

来自分类Dev

将数据框的每一列除以另一个数据框的所有列

来自分类Dev

如何将一个数据帧中某些列的值与另一数据帧中同一列集的值进行比较?

来自分类Dev

迭代数据框中的每个列,将每个值与另一个数据框中的另一列中的值匹配

来自分类常见问题

在R中,如何将一个数据框中选定行中的值与另一数据框中选定列的值进行匹配?

来自分类Dev

在R中,如何将一个数据框中选定行中的值与另一数据框中选定列的值进行匹配?

来自分类Dev

Pandas数据框将列与一个值进行比较,然后将这一行和上一行放入另一数据框

来自分类Dev

根据Python中的多个条件,将一列从多个数据框合并到另一数据框

来自分类Dev

将一个数据框的整个列设置为另一数据框的列的最小值

来自分类Dev

如何从一个数据框向另一数据框添加列?

来自分类Dev

Python Pandas:一个数据框中的列的行值变成另一数据框中的列

来自分类Dev

将一个数据框的多列除以另一数据框R的行名值

来自分类Dev

根据同一数据框的另一列绘制一个列

来自分类Dev

从另一数据框的一列中的另一个单词列表中删除数据框的一列中的每一行中的单词

来自分类Dev

将一个数据框的列添加到另一个数据框,以获取重叠列中的值

来自分类Dev

是否可以根据另一数据框的内容组合一个数据框中的列?

来自分类Dev

MySQL将一个表中的列与另一数据库表中的另一列进行比较

来自分类Dev

将一个数据集的每一行与另一数据集进行比较

来自分类Dev

将一个数据框中的所有值乘以另一个数据框中的一列,然后将结果保存到新对象中

来自分类Dev

数据框将每一列保存在单独的CSV文件中

来自分类Dev

按另一个数据框中的一列对pandas DataFrame进行排序-Pandas

来自分类Dev

我可以使用R中另一个数据框的对应值来划分数据框的每一列吗?

来自分类Dev

检查一个数据框值是否与另一数据框列匹配,然后在数据框列中设置值

来自分类Dev

将一列中的每个值与一个数据帧中的另一列中的每个值进行检查

来自分类Dev

如何为数据框中的每一列创建一个csv文件?

Related 相关文章

  1. 1

    将数据框中的一列与另一数据框中的两列进行比较

  2. 2

    如何将一个数据框中的整个列替换为另一数据框中的另一列?

  3. 3

    如何有效地将一个Pandas数据框的每一列与另一数据框的每一列相乘?

  4. 4

    根据另一数据框的行对一个数据框的列进行子集

  5. 5

    在R中另一数据框中的另一列的基础上在一个数据框中创建一列

  6. 6

    将数据框的每一列除以另一个数据框的所有列

  7. 7

    如何将一个数据帧中某些列的值与另一数据帧中同一列集的值进行比较?

  8. 8

    迭代数据框中的每个列,将每个值与另一个数据框中的另一列中的值匹配

  9. 9

    在R中,如何将一个数据框中选定行中的值与另一数据框中选定列的值进行匹配?

  10. 10

    在R中,如何将一个数据框中选定行中的值与另一数据框中选定列的值进行匹配?

  11. 11

    Pandas数据框将列与一个值进行比较,然后将这一行和上一行放入另一数据框

  12. 12

    根据Python中的多个条件,将一列从多个数据框合并到另一数据框

  13. 13

    将一个数据框的整个列设置为另一数据框的列的最小值

  14. 14

    如何从一个数据框向另一数据框添加列?

  15. 15

    Python Pandas:一个数据框中的列的行值变成另一数据框中的列

  16. 16

    将一个数据框的多列除以另一数据框R的行名值

  17. 17

    根据同一数据框的另一列绘制一个列

  18. 18

    从另一数据框的一列中的另一个单词列表中删除数据框的一列中的每一行中的单词

  19. 19

    将一个数据框的列添加到另一个数据框,以获取重叠列中的值

  20. 20

    是否可以根据另一数据框的内容组合一个数据框中的列?

  21. 21

    MySQL将一个表中的列与另一数据库表中的另一列进行比较

  22. 22

    将一个数据集的每一行与另一数据集进行比较

  23. 23

    将一个数据框中的所有值乘以另一个数据框中的一列,然后将结果保存到新对象中

  24. 24

    数据框将每一列保存在单独的CSV文件中

  25. 25

    按另一个数据框中的一列对pandas DataFrame进行排序-Pandas

  26. 26

    我可以使用R中另一个数据框的对应值来划分数据框的每一列吗?

  27. 27

    检查一个数据框值是否与另一数据框列匹配,然后在数据框列中设置值

  28. 28

    将一列中的每个值与一个数据帧中的另一列中的每个值进行检查

  29. 29

    如何为数据框中的每一列创建一个csv文件?

热门标签

归档