Я хотел бы объединить два data.frames, используя третий data.frame matches
, который дает ключ к тому, как следует объединить два предыдущих (id
и number
- совпадающие ключи. Class
всегда должен бытьсовпадение и служит дополнительной проверкой).df2
следует объединить с df1
, заменив столбцы с одинаковыми именами и вставив переменные из df2
в соответствующие строки в df1
(в этом примере эти строки будут иметь оценку, но в моих реальных примерах это около 20+ столбцовэто должно быть заменено из 30 или около того (оставшиеся 10 останутся прежними). Я надеюсь, что это ясно и заранее большое спасибо за помощь, как сделать это эффективно. Это должно быть left_join
, поскольку я хотел бы сохранить всезаписи в df1
. dplyr
предпочтительнее!
df1 <- data.frame(1:10,
c("a","b","a","b","c","c","b","a","b","c"),
seq(20,38,2),
dnorm(10,5,2),
rnorm(10,78,5))
colnames(df1) <- c("id","class","score","misc","hc")
df2 <- data.frame(11:19,
c("g","d","a","e","c","d","f","a","b"),
seq(40,48,1),
dnorm(9,6,1),
rnorm(9,45,3))
colnames(df2) <- c("number","class","score","other","md")
matches <- data.frame(c("b","a","c","a"),
c(4,1,5,8),
c(19,18,15,13))
colnames(matches) <- c("class","id","number")
library(dplyr)
Ожидаемый результат:
id class misc hc number score other md
1 a 0.00876415 70.85210 18 47 0.004431848 40.99189
2 b 0.00876415 81.27802 22 22 NA NA
3 a 0.00876415 69.19300 24 24 NA NA
4 b 0.00876415 75.86247 19 48 0.004431848 44.78242
5 c 0.00876415 69.18268 15 44 0.004431848 42.70708
6 c 0.00876415 80.49475 30 30 NA NA
7 b 0.00876415 76.52195 32 32 NA NA
8 a 0.00876415 73.52712 13 42 0.004431848 45.69842
9 b 0.00876415 81.50631 36 36 NA NA
10 c 0.00876415 80.55145 38 38 NA NA