与Set NA to 0 in R相反,我有一个data.frame data
,其中包含A列和B列(以及其他),其中NAs被0替换为
rowSums(data[,c("A", "B")], na.rm=TRUE)
。
我需要用NA
重新替换所有0个值。当我正在使用不仅包含数值的data.frame时,convert all zeros of a matrix in R to NA对我来说不起作用(转换为矩阵在这里看起来不太有希望)。
我试过了
data["A" == 0] <- NA
和data["B" == 0] <- NA
- 然而,它没有做任何事情(data.frame似乎保持不变)
答案 0 :(得分:4)
这是你需要的吗?
df <- data.frame(A=c(0, 3, "bla"), B=c("A", 0, "X"), C=c("x","B", 4)) #some fake data
df[df == 0] <- NA
答案 1 :(得分:0)
dplyr解决方案:data %>% dplyr::mutate(A = ifelse(A == 0, NA, A))
答案 2 :(得分:0)
另一个dplyr
解决方案。如果列是数字,则使用mutate_if
仅用NA替换零。 B不会改变,因为它是因子/字符列。
set.seed(123)
df <- data.frame(A=rep(0:3, 5), B=rep(c("0", "1"), 10), C=c(sample(0:5, 20, replace = TRUE)))
library(dplyr)
df %>%
mutate_if(is.numeric, funs(ifelse(. == 0, NA, .)))
如果您希望转换所有列(包括要素/字符列),也可以使用mutate_all
:
df %>%
mutate_all(funs(ifelse(. == 0, NA, .)))
结果:
A B C
1 NA NA 1
2 1 2 4
3 2 NA 2
4 3 2 5
5 NA NA 5
6 1 2 NA
7 2 NA 3
8 3 2 5
9 NA NA 3
10 1 2 2
11 2 NA 5
12 3 2 2
13 NA NA 4
14 1 2 3
15 2 NA NA
16 3 2 5
17 NA NA 1
18 1 2 NA
19 2 NA 1
20 3 2 5
答案 3 :(得分:0)
dplyr
解决方案
library(dplyr)
mtcars %>% replace(.==0, NA)
基础R解决方案
replace(mtcars, mtcars==0, NA)