我有两个列相同的数据框。一列是一个“键”。我想根据这个键添加所有其他列的值。数据帧具有不同的键值,一些重叠,另一些不重叠。
下面是一个简单的例子,其中只有两列需要添加在一起,我手动将这两列添加在一起:
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)
我确信有一种方法可以在不手动添加列的情况下做到这一点,但我不太明白。
发布于 2018-06-26 09:19:57
您可以收集/传播它们,以便一次处理所有这些问题:
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
https://stackoverflow.com/questions/51033643
复制相似问题