R中插补前后的平均值
我是R方面的新手。我的问题是如何使用缺失数据点前后的平均值来估算缺失值 榜样 使用每个NA的上下均值作为插补值 -第3行的平均值为38.5 -第7行的平均值为32.5R中插补前后的平均值,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
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
fromzoo
软件包的解决方案,该软件包将每个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您正在寻找移动平均插补-您可以使用imputeTS的na.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")