在dplyr中使用case_when时遇到问题

时间:2019-12-30 04:28:46

标签: r dplyr

已经晚了,我肯定犯了一个愚蠢的错误,但是为什么case_when的这种用法会产生错误?

x <- 1:5
dplyr:::case_when(
    x == 1 ~ TRUE,
    x != 1 ~ print(x))
#> [1] 1 2 3 4 5
#> Error: must be a logical vector, not an integer vector

1 个答案:

答案 0 :(得分:3)

该错误是因为case_when期望所有RHS的值都归为同一类型。

此处,在OP尝试中,TRUE属于"logical"类,而x属于"integer"类型,因此返回错误。您可以尝试

x <- 1:5
dplyr::case_when(x == 1 ~ NA_integer_, x != 1 ~ x)
#[1] NA  2  3  4  5

或者另一种方式:

dplyr::case_when(x != 1 ~ x, TRUE ~ NA_integer_)