如果第一列中的名称在R中的两个数据帧之间匹配,如何对第二列的值求和?

时间:2017-04-25 17:33:04

标签: r dataframe

我有两个数据帧,如下所示:

df1:

Sample   Digit
AACF-01    6
AACG-01    7
AAKD-01    3
AAIU-01    4

df2:

Sample   Digit
AACF-01    8
AACJ-01    2
AAKD-01    4
AALO-01    5

如果第一列中的名称在两个数据帧之间匹配,则将第二列中的值相加。

结果应如下所示:

Sample   Digit
AACF-01    14
AACG-01     7
AACJ-01     2
AAKD-01     7
AAIU-01     4
AALO-01     5

任何人都可以告诉我该怎么做? 谢谢

1 个答案:

答案 0 :(得分:1)

我们可以绑定数据集的行,按“样本”分组,得到sum

library(dplyr)
bind_rows(df1, df2) %>% 
       group_by(Sample) %>% 
       summarise(Digit = sum(Digit))
# A tibble: 6 × 2
#    Sample Digit
#    <chr> <int>
#1 AACF-01    14
#2 AACG-01     7
#3 AACJ-01     2
#4 AAIU-01     4
#5 AAKD-01     7
#6 AALO-01     5

data.table

library(data.table)
rbindlist(list(df1, df2))[, .(Digit = sum(Digit)), .(Sample)]
#    Sample Digit
#1: AACF-01    14
#2: AACG-01     7
#3: AAKD-01     7
#4: AAIU-01     4
#5: AACJ-01     2
#6: AALO-01     5

或使用base R来避免

aggregate(.~Sample, rbind(df1, df2), sum)
#    Sample Digit
#1 AACF-01    14
#2 AACG-01     7
#3 AACJ-01     2
#4 AAIU-01     4
#5 AAKD-01     7
#6 AALO-01     5