在OP的输入数据集中,所有列都是
factor
同时
NA
s是字符串
"NA"
是的。同时,操作代码检查整个列
any
它返回一个
TRUE/FALSE
并回收不是预期的产出如果我们把它们改成
character
类和到
不适用
s(使用
case_when
)
df %>%
mutate(category = case_when(
is.na(type) & addict %in% "visky" & is.na(sex) ~ "categ1",
type %in% c("bad", "wine") & !is.na(sex) ~ "categ2",
is.na(type) & is.na(addict) & is.na(sex) ~ "categ3",
TRUE ~ NA_character_))
# type addict sex category
#1 <NA> visky <NA> categ1
#2 bad wine male categ2
#3 <NA> <NA> <NA> categ3
注意:在这里,我们被使用
%in%
而不是
==
作为
==
返回na元素的na,而
%百分比
返回false。但是,我们仍然可以
==
结合了
is.na
根据OP的注释,我们可以创建一个自定义函数(不同的函数)
categFn <- function(typeCol, addictCol, sexCol) {
if(any(is.na(typeCol) & addictCol== "visky") & any(is.na(sexCol))) {
"categ1"
} else NA
}
df %>%
mutate(categ = categFn(type, addict, sex))
数据
df <- data.frame(type = c(NA, "bad",NA), addict=c('visky','wine',NA),
sex=c(NA,'male',NA), stringsAsFactors = FALSE)