2012-09-07 31 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的方法肯定比较短。 –