У меня есть
mydf1 <- data.frame(ID = c(1,2,3,4,5), color = c("red", NA, NA, NA, "green"), name = c("tom", "dick", "harry", "steve", "mike"))
mydf2 <- data.frame(ID = c(1,2,99), color = c("red", "orange", "yellow"), name = c("tom", "dick", "Aaron"))
Я хотел бы обновить цвет mydf1 $ на соответствующий цвет из mydf2 для любых строк, которые совпадают как по ID, так и по имени. Желаемым результатом было бы обновить цвет в строке 2 до оранжевого и оставить все остальное как есть:
ID color name
1 1 red tom
2 2 orange dick
3 3 <NA> harry
4 4 <NA> steve
5 5 green mike
Я пробовал решения с асимметрией c слияния, как в некоторых предыдущих постах, но получил нежелательную перезапись некоторые из моих полей в mydf1. Затем я попытался использовать матч, как предложено в другом посте, но получил ошибку. Не уверен, почему условие соответствия не работает.
mydf1$color <- mydf2$color[match(mydf1[c("ID", "name")], mydf2[c("ID", "name")])]