我有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
答案 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)))