Отсутствующие данные в R - Как пропустить группировку дней с отсутствующей информацией? - PullRequest
1 голос
/ 24 июня 2019

У меня есть почасовые значения измерений температуры, и я хочу рассчитать среднее значение за день только для полных (т.е. с 24 измерениями) дней. Неполные дни затем будут суммироваться как «НС».

Я сгруппировал значения по годам, месяцам и дням и вызову суммировать ().
У меня нет данных за три месяца, что является пробелом в моей функции ggplot и чего я хочу добиться с остальными. Проблема в том, что когда я звоню summarize(), чтобы вычислить среднее значение моих значений, также вызываются дни только с 1 или 2 измерениями. Только те со всеми пропущенными значениями (24) отображаются как «NA».

                   Date TempUrb  TempRur       UHI
1   2011-03-21 22:00:00    10.1 11.67000 -1.570000
2   2011-03-21 23:00:00     9.9 11.67000 -1.770000
3   2011-03-22 00:00:00    10.9 11.11000 -0.210000
4   2011-03-22 01:00:00    10.7 10.56000  0.140000
5   2011-03-22 02:00:00     9.7 10.00000 -0.300000
6   2011-03-22 03:00:00     9.5 10.00000 -0.500000
7   2011-03-22 04:00:00     9.4  8.89000  0.510000
8   2011-03-22 05:00:00     8.4  8.33500  0.065000
9   2011-03-22 06:00:00     8.2  7.50000  0.700000

AvgUHI <- UHI %>%  group_by(year(Date), add = TRUE) %>% 
  group_by(month(Date), add = TRUE) %>%
  group_by(day(Date), add = TRUE, .drop = TRUE) %>%
  summarize(AvgUHI = mean(UHI, na.rm = TRUE))

# A tibble: 2,844 x 4
# Groups:   year(Date), month(Date) [95]

   `year(Date)` `month(Date)` `day(Date)`  AvgUHI
        <int>         <int>       <int>   <dbl>
1476    2015             4       4     0.96625000
1477    2015             4       5     -0.11909722
1478    2015             4       6     -0.60416667
1479    2015             4       7     -0.92916667
1480    2015             4       8     NA
1481    2015             4       9     NA

AvgUHI<- AvgUHI %>%  group_by(`year(Date)`, add = TRUE) %>% 
  group_by(`month(Date)`, add = TRUE) %>%
  summarize(AvgUHI= mean(AvgUHI, na.rm = TRUE))

# A tibble: 95 x 3
# Groups:   year(Date) [9]
   `year(Date)` `month(Date)`  AvgUHI
          <int>         <int>   <dbl>
 50        2015             4   0.580887346 
 51        2015             5   0.453815051
 52        2015             6   0.008479618

Как вы можете видеть выше в финальной таблице, у меня есть среднее значение за 04-2015, в то время как мне не хватает данных за этот месяц (08 - 09/04/2015 для этого примера, представленного во второй таблице). То же самое происходит, когда я вычисляю AvgUHI и мне не хватает почасовых данных.

Я просто хотел бы видеть на последнем столе AvgUHI для 04-2015 будет NA.

Например: моего графика 1

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

В течение нескольких часов смотрите на ответ Руи Баррадаса.В течение нескольких месяцев работал следующий код:

AvgUHI %>%
  group_by(year(Day), add = TRUE) %>%
  group_by(month(Day), add = TRUE) %>%
  mutate(sum = sum(is.na(AvgUHI)), tmpUHI = if_else(sum <= 10, AvgUHI, NA_real_)) %>%
  summarise(AvgUHI = mean(tmpUHI, na.rm = TRUE)) -> AvgUHI
0 голосов
/ 24 июня 2019

Ниже приведен фрейм данных, агрегированный по дням, где только полные дни с 4 наблюдениями не являются NA. Затем вы можете сгруппировать по месяцам, чтобы получить окончательный фрейм данных.

UHI %>%
  mutate(Day = as.Date(Date)) %>%
  group_by(Day) %>%
  mutate(n = n(), tmpUHI = if_else(n == 24, UHI, NA_real_)) %>%
  summarize(AvgUHI = mean(tmpUHI)) %>%
  full_join(data.frame(Day = seq(min(.$Day), max(.$Day), by = "day"))) %>%
  arrange(Day) -> AvgUHI
...