我有两个具有相同列的数据框。一栏是“键”。我想基于此键添加所有其他列的值。数据帧具有不同的键值,有些重叠,而有些则没有。
这里是一个简单案例的示例,该案例仅需要将两列添加在一起,在这里我将这些列手动添加在一起:
library(dplyr)
# fake data
df1 <- data.frame(Time = 1:10, V1=rnorm(10), V2 = rnorm(10))
df2 <- data.frame(Time = 5:13, V1=rnorm(9), V2 = rnorm(9))
# merge data on Time
df_join <- full_join(df1, df2, by="Time")
df_join[is.na(df_join)] <- 0
# add columns together
df_join <- df_join %>%
mutate(V1 = V1.x + V1.y,
V2 = V2.x + V2.y) %>%
select(Time, V1, V2)
我确定没有手动添加列的方法,但是我不太明白。
答案 0 :(得分:2)
您可以收集/传播它们以一次全部处理:
full_join(gather(df1, k, v, -Time), gather(df2, k, v, -Time),
by=c("Time", "k")) %>%
mutate_at(vars(v.x, v.y), funs(if_else(is.na(.), 0, .))) %>%
mutate(v=v.x + v.y) %>%
select(Time, k, v) %>%
spread(k, v)
# Time V1 V2
# 1 1 -0.4108213 2.2635681
# 2 2 0.8734349 0.5203859
# 3 3 0.2322048 -2.1499689
# 4 4 -1.0893187 1.6631661
# 5 5 2.7415923 1.2145786
# 6 6 2.2640301 -0.5760655
# 7 7 0.8883223 0.9012936
# 8 8 3.8600507 -0.2658887
# 9 9 -0.5409009 -0.3971484
# 10 10 0.3518266 0.6282677
# 11 11 1.4754595 -0.2267939
# 12 12 0.1045988 -0.7126889
# 13 13 -1.1350954 -0.4815504