我正在尝试写一个替换()函数将给定数值向量中的每个缺失值替换为算术平均值 of 它的前面和后面的元素.
例如,如果c(5, NA, 6, 2, 3, 5, 6, 4, NA, 2, NA, 5)
给出,那么结果应该是c(5, 5.5, 6, 2, 3, 5, 6, 4, 3, 2, 3.5, 5)
.
我正在寻找一些优雅的解决方案,可能带有应用函数(没有控制流结构),但我还没有想出任何有效的解决方案。我不太确定如何访问 lambda function(x) 中的上一个和下一个元素。
replacena <- function(l)
{
stopifnot(is.numeric(l))
sapply(l[is.na(l)], function(x){ l[x] <- mean( c(l[-1:0], l[0:1]) ) } )
}
函数输入:
replacena(c(5, NA, 6, 2, 3, 5, 6, 4, NA, 2, NA, 5))
预期产出
c(5, 5.5, 6, 2, 3, 5, 6, 4, 3, 2, 3.5, 5)
有任何想法吗?