2015-06-19 38 views
0

的平均丢失数据假设数据是这样的:R:推诿与第一先前与后者不丢失数据

df <- data.frame(ID=1:6, Value=c(NA, 1, NA, NA, 2, NA)) 
df 
    ID Value 
1 1 NA 
2 2  1 
3 3 NA 
4 4 NA 
5 5  2 
6 6 NA 

而且我要的估算结果是这样的:

ID Value 
1 1 1.0 
2 2 1.0 
3 3 1.5 
4 4 1.5 
5 5 2.0 
6 6 2.0 

更具体的,如果只存在前一个或后一个非缺失数据中的一个,我想用第一个先前和后一个非缺失数据的均值来推算缺失数据,用这个非缺失数据进行补偿。没有定义所有数据缺失的行为。

如何在R中做到这一点?

+1

这似乎是你在找什么:http://stackoverflow.com/questions/15308205 /均值前,后归集,在-R – Frank

+0

imputeTS ::插值和动物园::约可能是值得一试,得到类似的请求的一个解决方案(不是100%的请求的结果确实) – stats0007

回答

1

使用na.locf向前和向后,并采取他们的平均:

library(zoo) 

both <- cbind(na.locf(df$Value, na.rm = FALSE), 
       na.locf(df$Value, na.rm = FALSE, fromLast = TRUE)) 
transform(df, Value = rowMeans(both, na.rm = TRUE)) 

捐赠:

ID Value 
1 1 1.0 
2 2 1.0 
3 3 1.5 
4 4 1.5 
5 5 2.0 
6 6 2.0 
0

这应该工作。我不知道这是不是你想要的。我不明白你的陈述。 “如果只存在前一个或后一个非缺失数据中的一个,我想用第一个先前和后一个非缺失数据的平均值来计算缺失数据,用这个非缺失数据进行补偿”

你想要找到什么值取代NAs?

1

看看approxfunrule=2的设计。这不正是你要的(因为它横跨NA差距的线性插值而不是替代的差距端点的平均值),但它可能是可以接受的:

> approxfun(df$ID, df$Value, rule=2)(df$ID) 
[1] 1.000000 1.000000 1.333333 1.666667 2.000000 2.000000 

随着rule=2它不表现为你渴望在极端。动物园包中还有na.approx方法。

我奉劝不要使用这样的数据对于任何进一步的统计推断。这种估算方法本质上是说在没有测量期间不存在随机变化的可能性,并且世界通常不是那么一致。