R中插补前后的平均值

R中插补前后的平均值,r,missing-data,imputation,R,Missing Data,Imputation,我是R方面的新手。我的问题是如何使用缺失数据点前后的平均值来估算缺失值 榜样 使用每个NA的上下均值作为插补值 -第3行的平均值为38.5 -第7行的平均值为32.5 age 52.0 27.0 NA 23.0 39.0 32.0 NA 33.0 43.0 谢谢。这将是您可以采取的基本手动方法: age <- c(52, 27, NA, 23, 39, 32, NA, 33, 43) age[is.na(age)] <- rowMeans(cbind(age[which(is.na

我是R方面的新手。我的问题是如何使用缺失数据点前后的平均值来估算缺失值

榜样

使用每个NA的上下均值作为插补值

-第3行的平均值为38.5

-第7行的平均值为32.5

age
52.0
27.0
NA
23.0
39.0
32.0
NA
33.0
43.0

谢谢。

这将是您可以采取的基本手动方法:

age <- c(52, 27, NA, 23, 39, 32, NA, 33, 43)
age[is.na(age)] <- rowMeans(cbind(age[which(is.na(age))-1], 
                                  age[which(is.na(age))+1]))
age
# [1] 52.0 27.0 25.0 23.0 39.0 32.0 32.5 33.0 43.0
另一方面:

age <- c(52, 27, NA, 23, 39, 32, NA, 33, 43)
age[is.na(age)] <- apply(sapply(which(is.na(age)), "+", c(-1, 1)), 2, 
                         function(x) mean(age[x]))
age
## [1] 52.0 27.0 25.0 23.0 39.0 32.0 32.5 33.0 43.0

age这里是一个使用
na.locf
from
zoo
软件包的解决方案,该软件包将每个na替换为之前或之后最新的非na

0.5*(na.locf(x,fromlast=TRUE) + na.locf(x))
[1] 52.0 27.0 25.0 23.0 39.0 32.0 32.5 33.0 43.0
如果您有多个连续NA,则此处的优势在于

x <- c(52, 27, NA, 23, 39, NA, NA, 33, 43)
0.5*(na.locf(x,fromlast=TRUE) + na.locf(x))
[1] 52 27 25 23 39 36 36 33 43

x您正在寻找移动平均插补-您可以使用imputeTSna.ma函数进行此操作

library(imputeTS)
x <- c(52, 27, NA, 23, 39, NA, NA, 33, 43)
na.ma(x, k=1, weighting = "simple")
库(输入)

当你说27和23的平均值是38.5时,我假设你犯了一个错误。是的,正确的平均值是25.0。如果一个NA与另一个NA相邻怎么办?谢谢你的帮助,我尝试使用上述方法,但我没有得到与你相同的答案。我得到的插补值是NA之前的值,不是NA前后的平均值。我该如何解决这个问题?再次感谢。如果我们连续出现一些“NA”,例如(52,27,NA,NA,23,NA,NA,NA,NA,33,43),我们该怎么办?
library(imputeTS)
x <- c(52, 27, NA, 23, 39, NA, NA, 33, 43)
na.ma(x, k=1, weighting = "simple")