在 R 中将 0 设置为 NA

Set 0 to NA in R

Set NA to 0 in R相反,我有一个data.frame data,其中A列和B列(以及其他列)中的NA被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 似乎保持不变)

这是你需要的吗?

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

dplyr 解决方案:data %>% dplyr::mutate(A = ifelse(A == 0, NA, A))

另一个dplyr解决方案。如果列是数字,这使用 mutate_if 仅用 NA 替换零。 B 没有改变,因为它是 factor/character 列。

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, .)))

如果您希望转换所有列(包括 facter/character 列),您也可以使用 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

dplyr解决方案

library(dplyr)
mtcars %>% replace(.==0, NA)

基础 R 解决方案

replace(mtcars, mtcars==0, NA)