本文介绍了如何在20列中用0代替NA?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to substitute NA by 0 in 20 columns. I found this approach for 2 columns, however I guess it's not optimal if the number of columns is 20. Is there any alternative and more compact solution?

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

更新:为简单起见,让我们用8列获取此数据,并在b,c,e,f和d列中替换NAs

UPDATE:For simplicity lets take this data with 8 columns and substitute NAs in columns b, c, e, f and d

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

推荐答案

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

We can use NAer from qdap to convert the NA to 0. If there are multiple column, loop using 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

这篇关于如何在20列中用0代替NA?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-05 06:42