r - 如何在20列中用0代替NA?

标签 r na

我想用20列中的0代替NA。我发现这种方法适用于2列,但是如果列数为20,我认为这不是最佳选择。是否有其他替代方法和更紧凑的解决方案?

mydata[,c("a", "c")] <-
        apply(mydata[,c("a","c")], 2, function(x){replace(x, is.na(x), 0)})

更新:
为简单起见,让我们用8列获取此数据,并在b,c,e,f和d列中替换NA
a  b  c  d  e  f  g  d
1  NA NA 2  3  4  7  6
2  g  3  NA 4  5  4  Y
3  r  4  4  NA t  5  5

结果必须是这样的:
a  b  c  d  e  f  g  d
1  0  0  2  3  4  7  6
2  g  3  NA 4  5  4  Y
3  r  4  4  0  t  5  5

最佳答案

我们可以使用NAer中的qdap将NA转换为0。如果有多列,请使用lapply循环。

library(qdap)
nm1 <- c('b', 'c', 'e', 'f')
mydata[nm1] <- lapply(mydata[nm1], NAer)
mydata
#  a b c  d e f g d.1
#1 1 0 0  2 3 4 7   6
#2 2 g 3 NA 4 5 4   Y
#3 3 r 4  4 0 t 5   5

或使用dplyr
library(dplyr)
mydata %>% 
   mutate_each_(funs(replace(., which(is.na(.)), 0)), nm1)
#  a b c  d e f g d.1
#1 1 0 0  2 3 4 7   6
#2 2 g 3 NA 4 5 4   Y
#3 3 r 4  4 0 t 5   5

关于r - 如何在20列中用0代替NA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33067547/

相关文章:

r - 有人能告诉我为什么 R 没有将整个 data.frame 用于这个 chisq.test 吗?

r - col2rgb(d) : invalid color name in tweenr 中的错误

r - boxplot 中的 na.action 选项有哪些?

r - factor() 中的未指定水平

do.call() 和 apply() 中的 RMarkdown 格式化表以错误的顺序出现

r - 如何根据 ID 将观察值求和到新的聚合变量

r - 在 R 中处理 NA 值

r - 从上一个非 NA 值获取索引

r - 如何用 NAs - R 简单地计算行数

r - 将 R 表达式中的向量变量组合为绘图文本