2017-06-15 70 views
0

我正在使用大型數據集,我不習慣使用一個這樣大的(286,212行,19列),我不知道如何解決我的問題。數據由782個網格參考的一年中的每一天的值組成,我有15年的時間。它看起來如下用特定日期和網格的平均值替換NA

**Month Day Grid x2004 x2005 x2006  x2007** 
1  1 A10 0.091 0.134  NA  0.066 
1  2 A10 0.12 0.10  0.23  0.054 
1  3 A10 0.55 NA  NA  0.08 
1  1 B10 NA  0.134  NA  0.17 
1  2 B10 0.14 0.151  NA  0.21 
1  3 B10 0.43 0.162  0.24  NA 

然而一些日子失蹤,我想插入的那一天平均使用來自其他年份值特定的網格。因此,如果2006年第1天的Grid A10缺失。我想插入2004年,2005年,2007年的第1天網格A10的平均值,在這種情況下爲0.097。

我想下面的代碼

,我打算做的所有年份,但它告訴我

"Error in rowMeans(data[c(data$x2006[i], data$x2007[i], data$x2012[i]), : 
    'x' must be numeric" 

雖然當我檢查類,它說,他們都是數字,所以我不知道爲什麼x不是數字。我也不知道,即使當我得到平均部分排序,如果代碼將起作用,以便我得到特定於每個網格和每一天的平均值。

請幫忙。由於

+0

有此'庫(動物園)愚弄;庫(dplyr); df1%>%group_by(Day,Grid)%>%mutate_at(vars(starts_with(「x」),na.aggregate)' – akrun

+0

對不起,我真的不知道你的意思嗎?那不是正常工作 – Fosulli

+0

你可以顯示預期產出 – akrun

回答

0

你能適應這個對你的代碼:

for(i in 1:ncol(data)){ data[is.na(data[,i]), i] <- mean(data[,i], na.rm = TRUE) }

+0

不,那沒用。認爲它找到了整體的意思,並插入它,而不是那一天的意思 – Fosulli

+0

我認爲這是找到列的意思,並將其加入。我不知道如何計算添加行的意思,任何建議? rowMeans不起作用。 – Fosulli

+0

也許更改爲[i,]和ncol爲nrow –