我正在尝试编写一个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)。
我正在寻找一些优雅的解决方案,可能带有应用函数(没有控制流结构),但我还没有想出任何有效的解决方案。我不太确定如何访问 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]) ) } )
}
Run Code Online (Sandbox Code Playgroud)
函数输入:
replacena(c(5, NA, 6, 2, 3, 5, 6, 4, NA, 2, NA, 5))
Run Code Online (Sandbox Code Playgroud)
预期产出
c(5, 5.5, 6, 2, 3, 5, 6, 4, 3, 2, 3.5, 5)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
尝试
library(zoo)
na.approx(v1)
[1] 5.0 5.5 6.0 2.0 3.0 5.0 6.0 4.0 3.0 2.0 3.5 5.0
Run Code Online (Sandbox Code Playgroud)
v1 <- c(5, NA, 6, 2, 3, 5, 6, 4, NA, 2, NA, 5)
Run Code Online (Sandbox Code Playgroud)