根据缺失的小时数删除天数

Remove days based on number of hours missing

我有一些按小时测量的空气污染数据。

Datetime PM2.5 Station.id
2020-01-01 00:00:00 10 1
2020-01-01 01:00:00 NA 1
2020-01-01 02:00:00 15 1
2020-01-01 03:00:00 NA 1
2020-01-01 04:00:00 7 1
2020-01-01 05:00:00 20 1
2020-01-01 06:00:00 30 1
2020-01-01 00:00:00 NA 2
2020-01-01 01:00:00 17 2
2020-01-01 02:00:00 21 2
2020-01-01 03:00:00 55 2

我从许多站收集了大量数据。使用 R,当一天有 1. 总共 18 小时的缺失数据和 2. 8小时连续缺失数据。

PS。原始数据可以是 NAs 已经被删除 或者 NAs 被插入.

“最有效” 方式几乎肯定会使用 data.table。像这样:

library(data.table)
setDT(your_data)
your_data[, date := as.IDate(Datetime)][,
  if(
    !(sum(is.na(PM2.5)) >= 18 & 
    with(rle(is.na(PM2.5)), max(lengths[values])) >= 8
  )) .SD,
  by = .(date, station.id)
]
#          date            Datetime PM2.5
# 1: 2020-01-01 2020-01-01 00:00:00    10
# 2: 2020-01-01 2020-01-01 01:00:00    NA
# 3: 2020-01-01 2020-01-01 02:00:00    15
# 4: 2020-01-01 2020-01-01 03:00:00    NA
# 5: 2020-01-01 2020-01-01 04:00:00     7
# 6: 2020-01-01 2020-01-01 05:00:00    20
# 7: 2020-01-01 2020-01-01 06:00:00    30

使用此示例数据:

your_data = fread(text = 'Datetime  PM2.5
2020-01-01 00:00:00 10
2020-01-01 01:00:00 NA
2020-01-01 02:00:00 15
2020-01-01 03:00:00 NA
2020-01-01 04:00:00 7
2020-01-01 05:00:00 20
2020-01-01 06:00:00 30')