Как добавить два столбца из двух разных фреймов данных в R на основе условия соединения - PullRequest
0 голосов
/ 24 января 2020

Мне нужно добавить значения из столбца другого фрейма данных в столбец в моем основном фрейме данных на основе условия соединения.

Пример кода:

> df <- data.frame(branch = c('a','b','c','d'),
+                  m1 = c(10,15,10,20),
+                  m3 = rnorm(4,15,2))
> df
  branch m1       m3
1      a 10 12.35114
2      b 15 14.87139
3      c 10 12.23589
4      d 20 20.26247
> 
> df2 <- data.frame(outlet = c('c','a','d','b'),
+                   ml = c(3,6,5,3))
> df2
  outlet ml
1      c  3
2      a  6
3      d  5
4      b  3
> 

Обязательный вывод:

> df
  branch m1       m3
1      a 16 12.35114
2      b 18 14.87139
3      c 13 12.23589
4      d 25 20.26247
> 

Я попытался выполнить inner_join, но мне нужно выполнить несколько шагов:

> df3 <- inner_join(df,df2,by = c('branch' = 'outlet'))
> df3
  branch m1       m3 ml
1      a 10 12.35114  6
2      b 15 14.87139  3
3      c 10 12.23589  3
4      d 20 20.26247  5
> df3$m1 <- df3$m1 + df3$ml
> df3
  branch m1       m3 ml
1      a 16 12.35114  6
2      b 18 14.87139  3
3      c 13 12.23589  3
4      d 25 20.26247  5
> df3[4] <- NULL
> df3
  branch m1       m3
1      a 16 12.35114
2      b 18 14.87139
3      c 13 12.23589
4      d 25 20.26247

> df <- df3

Мне нужен мой исходный кадр данных (df) с только что обновленными значениями столбца m1. Есть ли способ сделать задачу более эффективно?

1 Ответ

0 голосов
/ 24 января 2020

Вы можете просто использовать match, т.е.

df$m1 + df2$ml[match(df$branch, df2$outlet)]
#[1] 16 18 13 25
...