为什么 ifelse 将 NA 返回为 false?
Why is ifelse returning NA as false?
出于某种原因,我的 ifelse 语句返回的 NA 就好像它们是假的而不是 NA。知道为什么会发生吗?
相关列的数字从 1 到 10。
library(dplyr)
data <- read.csv('210901_CLEANN_Risks_Research.csv')
data <- data %>% mutate_if(is.character, as.factor)
data[data==""]<-NaN
data[data=="Refused to answer"]<-NaN
table(data$safety)
unique(data$safety)
a <- c(1,2,3,4,5)
data$safety <- ifelse(data$safety %in% a , "Yes", "No")
unique(data$safety)
table(data$safety)
输出如下:
data <- read.csv('210901_CLEANN_Risks_Research.csv')
data <- data %>% mutate_if(is.character, as.factor)
data[data==""]<-NA
data[data=="Refused to answer"]<-NA
table(data$safety)
> 1 2 3 4 5 6 7 8 9 10
> 2936 1112 836 548 479 261 165 91 51 12
unique(data$safety)
> [1] 1 2 3 7 5 6 4 8 9 10 NA
a <- c(1,2,3,4,5)
data$safety <- ifelse(data$safety %in% a , "Yes", "No")
unique(data$safety)
> [1] "Yes" "No"
table(data$safety)
> No Yes
> 583 5911
知道为什么会发生这种情况吗?
返回 FALSE
的不是 ifelse
,而是 %in%
c(NA, 5, 3) %in% 3
[1] FALSE FALSE TRUE
虽然
的行为与逐元素比较运算符 (==
) 不同
c(NA, 5, 3) == 3
[1] NA FALSE TRUE
可能,我们需要在 %in%
之前处理好 NA
ifelse(is.na(data$safety), NA, ifelse(data$safety %in% a , "Yes", "No"))
出于某种原因,我的 ifelse 语句返回的 NA 就好像它们是假的而不是 NA。知道为什么会发生吗?
相关列的数字从 1 到 10。
library(dplyr)
data <- read.csv('210901_CLEANN_Risks_Research.csv')
data <- data %>% mutate_if(is.character, as.factor)
data[data==""]<-NaN
data[data=="Refused to answer"]<-NaN
table(data$safety)
unique(data$safety)
a <- c(1,2,3,4,5)
data$safety <- ifelse(data$safety %in% a , "Yes", "No")
unique(data$safety)
table(data$safety)
输出如下:
data <- read.csv('210901_CLEANN_Risks_Research.csv')
data <- data %>% mutate_if(is.character, as.factor)
data[data==""]<-NA
data[data=="Refused to answer"]<-NA
table(data$safety)
> 1 2 3 4 5 6 7 8 9 10
> 2936 1112 836 548 479 261 165 91 51 12
unique(data$safety)
> [1] 1 2 3 7 5 6 4 8 9 10 NA
a <- c(1,2,3,4,5)
data$safety <- ifelse(data$safety %in% a , "Yes", "No")
unique(data$safety)
> [1] "Yes" "No"
table(data$safety)
> No Yes
> 583 5911
知道为什么会发生这种情况吗?
返回 FALSE
的不是 ifelse
,而是 %in%
c(NA, 5, 3) %in% 3
[1] FALSE FALSE TRUE
虽然
的行为与逐元素比较运算符 (==
) 不同
c(NA, 5, 3) == 3
[1] NA FALSE TRUE
可能,我们需要在 %in%
NA
ifelse(is.na(data$safety), NA, ifelse(data$safety %in% a , "Yes", "No"))