我想估算来自 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))
我不确定下一步该怎么做,我被卡住了。