R: Добавление столбцов из двух фреймов данных различной длины по ключу - PullRequest
0 голосов
/ 26 июня 2018

У меня есть два фрейма данных с одинаковыми столбцами.Один столбец является «ключом».Я хочу добавить значения всех других столбцов на основе этого ключа.Кадры данных имеют разные значения ключа, некоторые перекрываются, а другие нет.

Вот пример для простого случая только с двумя столбцами, которые нужно сложить вместе, где я добавляю столбцы вручную:

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 голосов
/ 26 июня 2018

Вы можете собирать / распространять их, чтобы иметь дело со всеми сразу:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...