首页 文章

如何搜索不同数据帧中一个数据帧中出现的字符串的出现并增加第三个数据帧中的计数

提问于
浏览
0

我有三个数据帧 . 第一个数据帧如下

ID      Col1    Col2    Col3
 XX:11   1       0       0
 YY:22   1       0       0
 ZZ:33   0       1       0
 AA:44   0       0       1
 BB:55   0       0       1

第二数据帧如下

ID      Col1
 YY:22   0
 AA:44   1
 XX:11   1
 DD:99   0

第三个数据框是

ColA    ColB    ColC

ColA,ColB和ColC分别对应于数据帧1的Col1,Col2和Col3 .

我试图从第一个存在的第二个数据帧中找到ID,如果它们存在,则在第三个数据帧中递增相应的Col * .

例如,从第二个数据帧中获取ID YY:22 . 这存在于第一个数据帧中,然后查看哪个列(来自Col1,Col2和Col3)具有1,然后相应地增加第三个数据帧中的相应列 . 在这种情况下,YY:22在第一个数据帧中的COl1为1,因此ColA需要在第三个数据帧中递增 .

编辑:预期输出是

ColA    ColB    ColC
    2       0       1

数据框2中的Col1无关紧要

3 回答

  • 2

    使用 dplyr 我们可以这样做:

    df3 = df1 %>%
        filter(ID %in% df2$ID) %>%
        summarize_at(vars(Col1:Col3), sum)
    

    输出:

    Col1 Col2 Col3
    1    2    0    1
    

    如果您需要列名为A,B,C,那么您现在可以像akrun的答案一样重命名它们:

    names(df3) <- paste0("Col", LETTERS[1:3])
    
  • 1

    您可以尝试从 dplyrsemi_join

    library(dplyr)
    df3 <- df1 %>% 
      semi_join(df2, by ="ID") %>%
      summarise_at(vars(Col1:Col3), funs(sum))
    
  • 2

    我们可以在两个数据集的'ID'之间使用 match ,基于该子集'df1'的子集,并使用 colSums 获取'Col'列的 sum

    df3 <- as.data.frame.list(colSums(df1[match(df2$ID, df1$ID, nomatch = 0),-1]))
    names(df3) <- paste0("Col", LETTERS[1:3])
    

相关问题