【问题标题】:SQLDF merge in R: counting NA values between two datesR中的SQLDF合并:计算两个日期之间的NA值
【发布时间】:2020-11-26 21:22:27
【问题描述】:

我正在尝试在 R 中使用 SQLDF 合并两个数据集。我正在计算 dat1 中位于 dat2 中两个日期之间的值的平均值。我想计算 dat2 中这两个日期之间的 NA 值的数量。

dat3= sqldf("select a.ID, avg(b.mean_pm25) as avg_pm
                from dat1 a
                left join dat2 b
                on a.ZIP=b.ZIP and (b.pm_date between a.startdate and a.enddate)
               group by a.ID")

【问题讨论】:

    标签: r merge na sqldf


    【解决方案1】:

    只需添加条件聚合即可查询。下面显示了两个版本,有和没有CASE 语句。

    select d1.ID
           , avg(d2.mean_pm25) as avg_pm
           , sum(d2.mean_pm25 IS NULL) as count_pm_nas
           , sum(case 
                      when d2.mean_pm25 IS NULL
                      then 1
                      else 0
                 end) as count_pm_nas_alternative
    from dat1 d1
    left join dat2 d2
         on d1.ZIP = d2.ZIP 
        and (d2.pm_date between d1.startdate and d1.enddate)
    group by d1.ID
    

    另外,关于 SQL 查询的最佳实践,请考虑 Bad Habits to Kick : Using table aliases like (a, b, c) or (t1, t2, t3)

    【讨论】:

      【解决方案2】:

      使用内置数据框BOD添加一些NA,提供测试数据,然后统计:

      library(sqldf)
      BOD$Time[3:4] <- NA  # test data
      
      sqldf("select sum(Time is null) as no_of_na from BOD")
      ##   no_of_na
      ## 1        2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-30
        • 2018-11-29
        • 1970-01-01
        相关资源
        最近更新 更多