在R中将0设置为NA

时间:2017-09-15 14:27:53

标签: r na

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] <- NAdata["B" == 0] <- NA - 然而,它没有做任何事情(data.frame似乎保持不变)

4 个答案:

答案 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)