可以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 ))
Run Code Online (Sandbox Code Playgroud)
mutate_impl(.data,dots)出错:评估错误:必须是double类型,不是逻辑.
单独来说,这两个陈述都很好.
如果要求返回所有NA,而不是NAs和非NAs 的混合,则不存在此问题.
例如:返回NA所有值cyl >= 6
> mtcars %>% mutate(thing = case_when(cyl >= 6 ~ NA))
cyl thing
1 6 NA
2 6 NA
3 4 NA
Run Code Online (Sandbox Code Playgroud)
看起来不错.
> mtcars %>% mutate(thing = case_when(cyl >= 6 ~ NA, cyl < 6 ~ NA ))
cyl thing
1 6 NA
2 6 NA
3 4 NA
Run Code Online (Sandbox Code Playgroud)
凉.
> mtcars[1:3,] %>% mutate(thing = case_when(cyl == 6 ~ 1, cyl < 6 ~ NA, cyl > 6 ~ NA ))
Run Code Online (Sandbox Code Playgroud)
mutate_impl(.data,dots)出错:评估错误:必须是double类型,不是逻辑.
不酷.
NB:为清楚起见,返回在实施例中的项目都来自mtcars[1:3,]与%>% select(cyl, thing)在所述表达式的结尾.
这是的问题class。我们需要NA_real匹配数字类型
mtcars %>%
mutate(thing = case_when(cyl >= 6 ~ 1,
cyl < 6 ~ NA_real_ ))
Run Code Online (Sandbox Code Playgroud)
另外,第二种情况
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
Run Code Online (Sandbox Code Playgroud)