5

我在一个数据框中有多个整数列,所有的 NA 都需要重新编码为 0。

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 列的前几列)

在此处输入图像描述

我可以像df$col[is.na(df$col)] <- 0每列一样手动将 NA 重新编码为 0,但是鉴于列太多,将其全部输入需要一段时间。

如何将所有这些 NA 重新编码为 0 一行或三行?

(我意识到我可以融化整数列,然后重新编码一个融化的列,但我宁愿在基数 R 中这样做)

4

2 回答 2

11

你非常接近:

df[is.na(df)] <- 0
于 2012-09-07T04:26:47.117 回答
2

使用plyr'scolwise元函数使这很容易:

dfZ=colwise(function(x)ifelse(is.na(x),0,x))(df)
于 2012-09-07T04:59:41.147 回答