0
我試圖用數據框x2和x3的數值的平均值代替數據框x1的多個列中的NA值,基於公共和不同的atrribute'ID'。用其他數據幀的平均值代替多個列的數字
所有dataframes(每個數據幀是特定年份)具有相同的列結構:
ID A B C .....
01 2 5 7 .....
02 NA NA NA .....
03 5 4 8 .....
我已經找到了答案在同一時間做1列,這要歸功於this post。
x1$A[is.na(x1$A)] <- (x2$A[match(x1$ID[is.na(x1$A)],x2$ID)] + x3$A[match(x1$ID[is.na(x1$A)],x3$ID)])/2
但因爲我有大約100個coulmns申請這個,因爲我真的很想有一個更聰明的方式來做到這一點。 我嘗試了this post以及here的建議。 我想出了這個代碼,但不能使它工作。
x1[6:105] = as.data.frame(lapply(x1[6:105], function(x) ifelse(is.na(x), (x2$x[match(x1$ID, x2$ID)]+x3$x[match(x1$ID, x3$ID)])/2, x1$x)))
得到了以下錯誤:
Error in ifelse(is.na(x), (x2$x[match(x1$ID, x2$ID)] + x3$x[match(x1$ID, : replacement has length zero
我最初以爲函數(X)製作的整列和X所代表的列名,但我認爲它代表了每個單獨單元格的值,這是爲什麼它不會工作。
我是R的新手,我肯定會感謝一些指導,讓我知道我出錯的地方,將邏輯應用到多列。
這可能不會導致錯誤,但'ifelse'的最後一個參數應該是x而不是'x1 $ x'。 – lmo