Слияние SQLDF в R: подсчет значений NA между двумя датами - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь объединить два набора данных с помощью SQLDF в R. Я вычисляю среднее значение для dat1 значений, которые попадают между двумя датами в dat2. Я хочу подсчитать количество значений NA, которые находятся между этими двумя датами в dat2.

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")

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Просто добавьте в запрос условное агрегирование. Ниже показаны две версии с оператором 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: Использование псевдонимов таблиц, таких как (a, b , c) или (t1, t2, t3) .

0 голосов
/ 06 августа 2020

Используя встроенный фрейм данных BOD добавьте несколько НА для предоставления тестовых данных и затем подсчитайте их:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...