Присоединяйтесь, а затем изменяйте, используя case_when
:
library(dplyr)
left_join(df1, df2, by=c('city','date'), suffix=c('','.2')) %>%
mutate(NO2=as.numeric(NO2),
NO2=case_when(is.na(NO2) ~ NO2.2,
TRUE ~ NO2)) %>%
select(names(df1))
city date NO2 province
1 nanjing 2018-1-1 15.0 jiangsu
2 nanjing 2018-1-2 11.2 jiangsu
3 guangzhou 2018-1-1 15.5 guangdong
4 guangzhou 2018-1-2 12.1 guangdong
5 dongguan 2018-1-1 16.0 guangdong
Data :
df1 <- structure(list(city = structure(c(3L, 3L, 2L, 2L, 1L), .Label = c("dongguan",
"guangzhou", "nanjing"), class = "factor"), date = structure(c(1L,
2L, 1L, 2L, 1L), .Label = c("2018-1-1", "2018-1-2"), class = "factor"),
NO2 = c(15L, NA, NA, NA, 16L), province = structure(c(2L,
2L, 1L, 1L, 1L), .Label = c("guangdong", "jiangsu"), class = "factor")), class = "data.frame", row.names = c("1",
"2", "3", "4", "5"))
df2 <- structure(list(city = structure(c(2L, 1L, 1L), .Label = c("guangzhou",
"nanjing"), class = "factor"), date = structure(c(2L, 1L, 2L), .Label = c("2018-1-1",
"2018-1-2"), class = "factor"), NO2 = c(11.2, 15.5, 12.1)), class = "data.frame", row.names = c("1",
"2", "3"))