相关疑难解决方法(0)

将数值向量中的 NA 替换为从邻居计算出的值

我正在尝试编写一个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)

有任何想法吗?

r na

2
推荐指数
1
解决办法
1700
查看次数

标签 统计

na ×1

r ×1