意思是先于后R中归集(mean-before-after imputation in R)

2019-07-21 06:26发布

我在R.新我的问题是如何和之前丢失的数据点之后使用的平均值,以填补缺失值?

例;

使用从上,每个NA的下部作为转嫁给值的平均值。

-mean为行号3是38.5

-mean为行号7是32.5

age
52.0
27.0
NA
23.0
39.0
32.0
NA
33.0
43.0

谢谢。

Answer 1:

这里使用的溶液na.locfzoo包,其中替换每个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

编辑 rev的说法已经过时,所以我通过更换fromlast



Answer 2:

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

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

或者,因为你似乎有一列data.frame

mydf <- data.frame(age = c(52, 27, NA, 23, 39, 32, NA, 33, 43))

mydf[is.na(mydf$age), ] <- rowMeans(
  cbind(mydf$age[which(is.na(mydf$age))-1],
        mydf$age[which(is.na(mydf$age))+1]))


Answer 3:

只是另一种方式:

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


Answer 4:

您正在寻找移动平均线插补-你可以使用imputeTSna.ma功能这一点。

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

[1] 52.00000 27.00000 25.00000 23.00000 39.00000 31.66667 38.33333 33.00000 43.00000

这将产生究竟需要的结果。 随着参数k您指定每侧不少邻居都考虑在内进行计算。



文章来源: mean-before-after imputation in R