【问题标题】:dplyr Create new boolean variable from any_vars() filter conditiondplyr 从 any_vars() 过滤条件创建新的布尔变量
【发布时间】:2019-08-15 16:17:34
【问题描述】:

我想根据多个变量的条件创建一个布尔变量。如this question 的第二个答案所示,可以根据多个列的许多条件进行过滤:

 mtcars %>% filter_at(vars(starts_with("d"),starts_with("c")), any_vars(. %in% c(4)))

我想做类似的事情

test <- mtcars %>% mutate(has.4 = any_vars(vars(starts_with("d"),starts_with("c")) %in% c(4)))

但这当然不起作用并给出Error: Column ``has.4`` is of unsupported type quoted call

filter_at() 调用已经在创建用于对数据进行子集化的布尔值。如何将该输出通过管道传输到新变量中并保留所有行?

另外,我只想创建一个新列,所以 mutate_at()mutate_if() 似乎不是正确的调用。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这里不是starts_with,而是matches

    library(dplyr)
    out1 <- mtcars %>% 
                filter_at(vars(matches('^(d|c)')), any_vars(. %in% 4))
    

    如果我们需要一个列,我们可以用rowSums创建条件

    out2 <- mtcars %>%
               mutate(has.4 = rowSums(select(., matches("^(d|c)")) == 4) > 0)
    
    identical(out1, out2 %>%
                            filter(has.4) %>%
                             select(-has.4))
    #[1] TRUE
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多