【问题标题】:R: Adding columns from two data frames of different length by a keyR:通过键从两个不同长度的数据帧中添加列
【发布时间】:2018-06-26 01:13:26
【问题描述】:

我有两个具有相同列的数据框。一列是“键”。我想根据这个键添加所有其他列的值。数据帧有不同的关键值,有些重叠,有些没有。

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

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)

我确信有一种方法可以在不手动添加列的情况下做到这一点,但我不太明白。

【问题讨论】:

    标签: r merge dplyr


    【解决方案1】:

    您可以将它们收集/传播以一次处理:

    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
    

    【讨论】:

    • 完美。干杯!
    猜你喜欢
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2019-02-27
    • 1970-01-01
    相关资源
    最近更新 更多