Мы можем объединить два набора данных с помощью id
и city.name
и затем выбрать столбцы без NA из location
, используя coalesce
.
library(dplyr)
left_join(df1, df2, by = c('id', 'city.name')) %>%
mutate(location = coalesce(location.x, location.y)) %>%
select(names(df1))
# id location city.name
#1 1 54.2340 name1
#2 2 57.2340 name2
#3 3 58.2340 name3
#4 4 55.2345 name4
Или в базе R:
transform(merge(df1, df2, by = c('id', 'city.name'), all.x = TRUE),
location = ifelse(is.na(location.x), location.y, location.x))[names(df1)]
данные
df1 <- structure(list(id = 1:4, location = c(54.234, NA, NA, 55.2345
), city.name = structure(1:4, .Label = c("name1", "name2", "name3",
"name4"), class = "factor")), class = "data.frame", row.names = c(NA, -4L))
df2 <- structure(list(id = 2:3, location = c(57.234, 58.234),
city.name = structure(1:2, .Label = c("name2", "name3"), class = "factor")),
class = "data.frame", row.names = c(NA, -2L))