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)
我找不到好的代码示例。你能给我一个好的建议吗?
一种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)