2012-09-07 72 views
5

我有在數據幀中的多個整數列,全部用的NA,我需要重新編碼爲0。重新編碼的NA在多個數據幀列

df1 <- as.data.frame(sapply(paste(sample(letters,50,T),sample(letters,10), sep=""), function(x) {sample(c(NA,0:5),10,T)})) 
df2 <- as.data.frame(sapply(paste(sample(letters,5,T),sample(letters,10,T), sep=""), function(x) {sample(letters[1:5],10,T)})) 
df <- cbind(df2,df1) 

生產這樣的輸出...(僅前幾個所示的55)的列

enter image description here

我可以去重新編碼來港爲0手動像df$col[is.na(df$col)] <- 0爲每列,但考慮到有這麼多列,這將需要一段時間才能鍵入全力以赴。

如何在一行或三行中將所有這些NA重新編碼爲0?

(我知道我可以融化整數列,然後重新編寫一個熔化的列,但我寧願做在基礎R)

回答

11

你是非常接近:

df[is.na(df)] <- 0 
+0

Woah ....不敢相信這是那麼容易。那麼我怎麼能指定一個重新編碼的列的範圍,而不是所有的? –

+1

沒關係,我明白了。 'df [6:10] [is.na(df [6:10])] < - 0'。我甚至沒想過要連續添加兩個方括號。 –

+0

@ TommyO'Dell,沒問題。就像我說的,你非常接近! – A5C1D2H2I1M1N2O1R2T1

2

使用plyrcolwise元功能使這容易:

dfZ=colwise(function(x)ifelse(is.na(x),0,x))(df) 
+1

雖然@ mrdwab的方法肯定比較短。 –