我有两个具有不同尺寸的以下形式的 date.frame 。我想替换 df1$NO2
中的 NA 值与 NO2
值来自 df2
通过city
和date
.
df1
city date NO2 province
#1 nanjing 2018-1-1 15 jiangsu
#2 nanjing 2018-1-2 NA jiangsu
#3 guangzhou 2018-1-1 NA guangdong
#4 guangzhou 2018-1-2 NA guangdong
#5 dongguan 2018-1-1 16 guangdong
... ... ... ....
df2
city date NO2
#1 nanjing 2018-1-2 11.2
#2 guangzhou 2018-1-1 15.5
#3 guangzhou 2018-1-2 12.1
... ... ...
我想要的输出是:
Desired output
city date NO2 province
#1 nanjing 2018-1-1 15 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 guangdong
... ... ... ....
非常感谢。
最佳答案
我们可以连接两个数据框并使用coalesce
来选择两列中的第一个非NA值。
library(dplyr)
left_join(df1, df2, by = c('city', 'date')) %>%
mutate(NO2 = coalesce(NO2.x, NO2.y)) %>%
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
在基础 R 中,这可以通过 merge
和 ifelse
来完成
transform(merge(df1, df2, by = c('city', 'date'),
all.x = TRUE), NO2 = ifelse(is.na( NO2.x), NO2.y, NO2.x))[names(df1)]
关于将 NA 替换为另一个 df 按日期和城市的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61670955/