case_when()
中的dplyr
可以返回NA
和非NA
值的组合吗?
当我要求它返回NA
以响应一个语句,但是响应另一个语句时返回非NA
值时,它会抛出一个评估错误:
例如,我希望1
代表cyl >= 6
的所有值,NA
代表cyl < 6
> library("dplyr")
> mtcars %>% mutate(thing = case_when(cyl >= 6 ~ 1, cyl < 6 ~ NA ))
mutate_impl(.data,dots)中的错误:评估错误:必须是类型 双重,不合逻辑。
单独,这两个陈述都很好。
如果要求返回所有NAs,而不是NA
和非NA
s的混合,则不会出现此问题。
例如:对NA
cyl >= 6
> mtcars %>% mutate(thing = case_when(cyl >= 6 ~ NA))
cyl thing
1 6 NA
2 6 NA
3 4 NA
看起来不错。
> mtcars %>% mutate(thing = case_when(cyl >= 6 ~ NA, cyl < 6 ~ NA ))
cyl thing
1 6 NA
2 6 NA
3 4 NA
冷却。
> mtcars[1:3,] %>% mutate(thing = case_when(cyl == 6 ~ 1, cyl < 6 ~ NA, cyl > 6 ~ NA ))
mutate_impl(.data,dots)中的错误: 评估错误:必须是double类型,不合逻辑。
不酷。
注意:为清晰起见,示例中的返回项目全部来自表达式末尾的mtcars[1:3,]
%>% select(cyl, thing)
。
答案 0 :(得分:4)
以下是class
的问题。我们需要NA_real
来匹配数字类型
mtcars %>%
mutate(thing = case_when(cyl >= 6 ~ 1,
cyl < 6 ~ NA_real_ ))
另外,对于第二种情况
mtcars[1:3,] %>%
mutate(thing = case_when(cyl == 6 ~ 1,
cyl < 6 ~ NA_real_,
cyl > 6 ~ NA_real_ )) %>%
select(cyl, thing)
# cyl thing
# 6 1
# 6 1
# 4 NA