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方法。

我奉勸不要使用這樣的數據對於任何進一步的統計推斷。這種估算方法本質上是說在沒有測量期間不存在隨機變化的可能性,並且世界通常不是那麼一致。