我想用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/