合并并汇总两个不同的data.tables

时间:2017-11-01 12:30:24

标签: r data.table

我有2个不同的data.tables。我需要根据行值合并和求和。两个表的示例如下面的输入和预期输出所示。

输入

表1

X   A   B
A   3   
B   4   6
C   5   
D   9   12

表2

X   A   B    
A   1   5
B   6   8
C   7   14
D   5   
E   1   1
F   2   3
G   5   6

预期输出:

X   A   B
A   4   5
B   10  14
C   12  14
D   14  12
E   1   1
F   2   3
G   5   6

3 个答案:

答案 0 :(得分:2)

我们可以通过rbind两个表执行此操作,然后按sum

进行分组
library(data.table)
rbindlist(list(df1, df2))[, lapply(.SD, sum, na.rm = TRUE), by = X]
#   X  A  B
#1: A  4  5
#2: B 10 14
#3: C 12 14
#4: D 14 12
#5: E  1  1
#6: F  2  3
#7: G  5  6

或使用与dplyr

类似的方法
library(dplyr)
bind_rows(df1, df2) %>%
    group_by(X) %>%
    summarise_all(funs(sum(., na.rm = TRUE)))

注意:在这里,我们假设空白是NA而且' A'和' B'列是numeric/integer

答案 1 :(得分:0)

首先合并你的桌子,然后做总和。如果您以后想要删除单个值,则可以轻松完成。

out <- merge(df1, df2, by.x="X", by.y="X", all.x=T, all.y=T)
out$sum <- rowSums(out[2:3])
out$A <- out$B <- NULL  # drop original values

答案 2 :(得分:0)

下面的代码将帮助您一次完成所有数字列的所需作业

library(dplyr)
Table = Table1 %>% full_join(Table2) %>% 
  group_by(X) %>% summarise_all(funs(sum(.,na.rm = T)))