gpt4 book ai didi

r - 用先前值和后续值的平均值填充 NA 值

转载 作者:行者123 更新时间:2023-12-02 19:40:07 25 4
gpt4 key购买 nike

我正在处理一个天气变量(温度、降水等)数据集,其中有一些缺失值。由于我的具体方法(对几天内的这些变量求和),我需要解决数据集中的 NA 值。

当每日值缺失时,我想用前一天和后一天的平均值来填充该天。这里的假设是每一天的天气值都相似。是的,我意识到这是一个很大的假设。

我开发了以下内容:

maxTemp <- c(13.2, 10.7, NA, 17.9, 6.6, 10, 13, NA, NA, 8.8, 9.9, 14.9, 16.3, NA, 18, 9.9, 11.5, 15.3, 21.7, 23.9, 26.6, 27, 22.3, NA, 17.9)
weather <- as.data.frame(maxTemp)
weather %>%
mutate(maxTempNA = if_else(is.na(maxTemp),
(lag(maxTemp) + lead(maxTemp))/2,
maxTemp))

但是,在某些情况下,我连续几天有两个 NA 值,因此这不起作用。关于编码方法的任何想法,以便当连续有两个(或更多)NA 时,平均值使用“bookending”值来填充 NA?

最终结果如下所示:

maxTemp <- c(13.2, 10.7, 14.3, 17.9, 6.6, 10, 13, 10.9, 10.9, 8.8, 9.9, 14.9, 16.3, 17.15, 18, 9.9, 11.5, 15.3, 21.7, 23.9, 26.6, 27, 22.3, 20.1, 17.9)

最佳答案

如何使用approxNA替换为插值;默认情况下,approx 使用线性插值,因此这应该与您的手动平均替换结果相匹配。

weather %>%
mutate(maxTemp_interp = approx(1:n(), maxTemp, 1:n())$y)
# maxTemp maxTemp_interp
# 1 13.2 13.20
# 2 10.7 10.70
# 3 NA 14.30
# 4 17.9 17.90
# 5 6.6 6.60
# 6 10.0 10.00
# 7 13.0 13.00
# 8 NA 11.60
# 9 NA 10.20
# 10 8.8 8.80
# 11 9.9 9.90
# 12 14.9 14.90
# 13 16.3 16.30
# 14 NA 17.15
# 15 18.0 18.00
# 16 9.9 9.90
# 17 11.5 11.50
# 18 15.3 15.30
# 19 21.7 21.70
# 20 23.9 23.90
# 21 26.6 26.60
# 22 27.0 27.00
# 23 22.3 22.30
# 24 NA 20.10
# 25 17.9 17.90

我在此处创建了一个新列,以便更轻松地与原始数据进行比较。


更新

Markus 在评论中指出(感谢 @markus),要重现预期的输出,您实际上需要 method = "constant"f = 0.5:

weather %>%
mutate(maxTemp_interp = approx(1:n(), maxTemp, 1:n(), method = "constant", f = 0.5)$y)
# maxTemp maxTemp_interp
# 1 13.2 13.20
# 2 10.7 10.70
# 3 NA 14.30
# 4 17.9 17.90
# 5 6.6 6.60
# 6 10.0 10.00
# 7 13.0 13.00
# 8 NA 10.90
# 9 NA 10.90
# 10 8.8 8.80
# 11 9.9 9.90
# 12 14.9 14.90
# 13 16.3 16.30
# 14 NA 17.15
# 15 18.0 18.00
# 16 9.9 9.90
# 17 11.5 11.50
# 18 15.3 15.30
# 19 21.7 21.70
# 20 23.9 23.90
# 21 26.6 26.60
# 22 27.0 27.00
# 23 22.3 22.30
# 24 NA 20.10
# 25 17.9 17.90

关于r - 用先前值和后续值的平均值填充 NA 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60385358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com