如果使用 tidyselect contains() 选择的*任何*列为 TRUE,则返回 TRUE

jur*_*ken 1 r dplyr

我有几个布尔变量。我想使用 mutate() 创建一个变量,如果根据列名选择的任何变量也为 true,则该变量为 TRUE。

我已经尝试过以下方法。

mutate(anyTRUE = if_any(.cols = select(contains("var")), isTRUE(.)))
Run Code Online (Sandbox Code Playgroud)

isTRUE() 没有按照我希望的方式接收变量。是否有不同的 tidyverse 结构方式,或者我可以使用不同的函数来获得所需的结果?

谢谢。

akr*_*run 5

删除select- 如果我们想使用isTRUE,则使用rowwise然后mutate

library(dplyr)
dat %>%
    rowwise %>%
    mutate(anyTRUE = if_any(.cols = contains('var'), isTRUE)) %>%
    ungroup
Run Code Online (Sandbox Code Playgroud)

或者不rowwise使用 ,使用I(与这些逻辑列相同)

dat %>%
    mutate(anyTRUE = if_any(.cols = contains('var'), I))
Run Code Online (Sandbox Code Playgroud)

或者没有任何功能,因为这些是合乎逻辑的

dat %>%
     mutate(anyTRUE = if_any(.cols = contains('var')))
   var1  var2  var3 anyTRUE
1  TRUE FALSE FALSE    TRUE
2 FALSE  TRUE FALSE    TRUE
3 FALSE FALSE FALSE   FALSE
Run Code Online (Sandbox Code Playgroud)

数据

dat <- data.frame(var1 = c(TRUE, FALSE, FALSE),
    var2 = c(FALSE, TRUE, FALSE), var3 = FALSE)
Run Code Online (Sandbox Code Playgroud)