R中的数据丢失-如何跳过信息丢失的几天分组?

时间:2019-06-24 17:36:39

标签: r date missing-data

我有每小时的温度测量值,我希望仅计算完整(即24个测量)天的每天平均值。不完整的天数将被总结为“ NA”。

我将每年,每月和每天的值分组在一起,然后调用summary()。
我遗失了三个月的数据,这在我的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的平均值,而我缺少该月的数据(第二个表上的示例表示2015年8月9日至4月9日)。 当我计算AvgUHI并且缺少每小时数据时,也会发生同样的情况。

我只是想在最后一张桌子上看到2015年4月4日的AvgUHI是NA。

例如:我的图表1

2 个答案:

答案 0 :(得分:0)

以下内容将提供按天汇总的数据框,其中只有整整几天(含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

答案 1 :(得分:0)

几个小时来看看鲁巴拉达斯的答案。几个月以来,以下代码一直有效:

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