我想使用线性插值来替换 Df 上的 NA 值。在我的 Df 列上,表示每日数据的时间序列,因此 Df 采用宽格式。我的数据代表天数(以列为单位)和变量温度的值(以行为单位)。所以 DF 看起来像下面这样(这是简化的方式)
Tempdf <- data.frame ("Day1"= c(20, 22, 19, 28, NA),
"Day2" = c(NA, 24, NA, NA, 28) , "Day3"=c(23, 26, NA, NA, 29), "Day4"= c(25, 24, NA, 29, 30),"Day5"=c(24, NA, 22, 28, 29))
我有很长的时间序列数据(超过 1000 天,其中有些日子是 NA 值),所以我想根据时间序列内的数据插入这些 NA 值。我不确定是否需要指定一个范围,假设对于每个 NA 查看同一行、NA 前后 3 列的值(例如),然后插入该值。我需要这样的东西,就好像插值是基于所有列进行的,它会查看多年来的每日值,因此结果将与接近 NA 记录丢失时的日期的温度数据非常不同。
假设第 1 天:第 5 天的温度如我的示例所示:20、NA、23、25、24,我预计 NA 约为 23。
我尝试过动物园套餐,但运气不佳。
Temp2 <- na.approx(Temp1)
谢谢!
您可以在
approx
内使用 apply
。请注意,对于第一列或最后一列中缺失的值,这将简单地复制相邻值,而不是尝试推断趋势。对于内部列中的缺失值,该值将插值在相邻的非缺失列之间。
Tempdf |>
apply(1, \(x) approx(1:length(x), x, xout = 1:length(x), rule = 2)$y) |>
t() |>
as.data.frame() |>
setNames(names(Tempdf))
#> Day1 Day2 Day3 Day4 Day5
#> 1 20 21.5 23.0 25.0 24
#> 2 22 24.0 26.0 24.0 24
#> 3 19 21.0 23.0 22.5 22
#> 4 28 30.0 29.5 29.0 28
#> 5 28 28.0 29.0 30.0 29