1

我想估算来自 6 个不同气象站的温度值。每 30 分钟测量一次数据。我只想在一天和一个月的 NA 值超过 20% 时才估算这些值。所以我对每个日期/月的值进行分组,计算每个日期/月的 NA 平均值,然后我想过滤以保留小于 20% NA 的天/月,以便估算其余部分。最好的方法是什么?我对过滤器进行编码时遇到问题,因为我不确定它是否按照我想要的方式过滤。另外,以后估算缺失值的最佳方法是什么?我试图让自己熟悉imputeTS包,但我不确定我应该使用哪种方法。na_seadec还是na_seasplit别的什么?

我的数据(样本,使用 slice_sample 创建,n=20 来自 dplyr 包)

df <- structure(list(td = structure(c(1591601400, 1586611800, 1574420400, 
1583326800, 1568898000, 1561969800, 1577010600, 1598238000, 1593968400, 
1567800000, 1590967800, 1584981000, 1563597000, 1589117400, 1599796800, 
1563467400, 1569819600, 1571014800, 1573320600, 1577154600), tzone = "UTC", class = c("POSIXct", 
"POSIXt")), Temp_Dede = c(13.7, NA, NA, 6.4, 14.9, 19.1, 1.3, 
14.2, 21.1, 15.1, 10, 5, 14.1, 24.2, 8.8, 25.3, 14.9, 19.7, NA, 
6.2), Temp_188 = c(13.1, 12.6, 8.9, 6.3, 14.5, 18.8, 1.4, 14.2, 
20.9, 13.1, 10.4, 5.1, 12.2, 24.2, 9.4, 25.9, 14.8, 18.9, NA, 
6.1), Temp_275 = c(13.9, 12.6, 8.8, 6, 14.3, 18.9, 1.4, 13.5, 
20.4, 12.2, 11.1, 4.6, 12.5, 23.3, 9.9, 24, 14.8, 19.2, 6.9, 
5.9), Temp_807 = c(13.9, 13.1, 8.8, 6.2, 14.3, 19.1, 1.4, 14.7, 
20.5, 13.3, 10.6, 4.9, 12.8, 23.1, 10.3, 24.8, 14.7, 19.1, 6.9, 
6.1), Temp_1189 = c(13.7, 12.3, 8.8, 5.6, 14.1, 18.4, 1.4, 13.3, 
19.9, 13.3, 10.7, 4.4, 13.6, 24, 9.8, 24.9, 14.7, 19.1, 6.9, 
5.7), Temp_1599 = c(13.2, 12.7, 8.8, 5.1, 14.3, 18.3, 1.8, 14.2, 
20.3, 13.2, 10.6, 4.4, 12.1, 22.9, 9.8, 25.8, 14.8, 19.2, 6.9, 
5.9)), row.names = c(NA, -20L), class = "data.frame")

到目前为止我一直在使用的代码。我只是在第一步中按天分组。有几个月的数据缺少完整的几天,因此我需要过滤具有 > 20 % NA 的月份。

df  %>% group_by(Datum) %>% 
            filter_at(vars(Temp_Dede, Temp_188, Temp_275, Temp_807, Temp_1189, Temp_1599),~mean(is.na(.) <0.2))

我不确定下一步该怎么做,我被卡住了。

4

0 回答 0