R:通过关键字从两个不同长度的数据帧中添加列

时间:2018-06-26 01:13:27

标签: r merge dplyr

我有两个具有相同列的数据框。一栏是“键”。我想基于此键添加所有其他列的值。数据帧具有不同的键值,有些重叠,而有些则没有。

这里是一个简单案例的示例,该案例仅需要将两列添加在一起,在这里我将这些列手动添加在一起:

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)

我确定没有手动添加列的方法,但是我不太明白。

1 个答案:

答案 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