如果用 R 所有值都为 0,则用 0 填充缺失

ESK*_*Kim 5 if-statement r na dplyr

我正在尝试用 R 来填充缺失值。

如果所有其他值都是0,那么我想用0填充缺失。

一个例子如下所示。在这个数据中,c除了0之外,列中的所有值NA都是0。所以,我想Na用0填充。

set.seed(1000)
a<-rnorm(10)
b<-rnorm(10)
c<-rep(0,10)
c[c(2,4,8)]<-NA
test<-cbind(a,b,c)

               a          b  c
 [1,]  0.1901328  0.6141360  0
 [2,] -0.9884426  0.6508993 NA
 [3,] -0.9783197  2.1059862  0
 [4,] -1.8584651  0.4354903 NA
 [5,]  0.6623067  1.6382126  0
 [6,] -1.2542872  0.1370791  0
 [7,] -1.9971880  1.9302738  0
 [8,]  1.9417941  0.0449239 NA
 [9,]  1.7046508  1.0726263  0
[10,] -0.7289351 -2.8374912  0
Run Code Online (Sandbox Code Playgroud)

我找不到好的代码示例。你能给我一个好的建议吗?

tmf*_*mnk 1

一种dplyr选择可能是:

test %>%
 as.data.frame() %>%
 mutate_if(~ all(. %in% c(0, NA)), ~ replace(., is.na(.), 0))

             a           b c
1  -0.44577826 -0.98242783 0
2  -1.20585657 -0.55448870 0
3   0.04112631  0.12138119 0
4   0.63938841 -0.12087232 0
5  -0.78655436 -1.33604105 0
6  -0.38548930  0.17005748 0
7  -0.47586788  0.15507872 0
8   0.71975069  0.02493187 0
9  -0.01850562 -2.04658541 0
10 -1.37311776  0.21315411 0
Run Code Online (Sandbox Code Playgroud)

或者:

test %>%
 as.data.frame() %>%
 mutate_if(~ all(. == 0, na.rm = TRUE), ~ replace(., is.na(.), 0))
Run Code Online (Sandbox Code Playgroud)