将 NA 替换为另一个 df 按日期和城市的值

标签 r replace na

我有两个具有不同尺寸的以下形式的 date.frame 。我想替换 df1$NO2 中的 NA 值与 NO2值来自 df2通过citydate .
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 中,这可以通过 mergeifelse 来完成

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/

相关文章:

r - 通过循环从数据帧填充矩阵

python - Python 中替换特定字符的优雅方法

python - 当它是一个单独的词时替换一个子串

r - 涉及 NA 的逻辑运算

r - 如何在 R 中围绕 NA 值绘制多边形?

r - r 问题中的干图

r - 如何防止用户使用 Shiny dateRangeInput 在开始日期之前设置结束日期

r - 如何在 R : options() vs. ReferenceClasses 中存储特定于包的设置

Java String ReplaceAll 方法对循环有异常影响?

r - 如何从包含 "NA"值且少于所需数据量的数据集中删除行?