在 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] <- NA
和 data["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)
与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] <- NA
和 data["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)