【问题标题】:How to loop through multiple columns with same filters? [duplicate]如何使用相同的过滤器遍历多个列? [复制]
【发布时间】:2021-07-09 03:02:32
【问题描述】:

我正在尝试查看是否可以使用循环使用 apply 或 purrr 函数来遍历列以过滤相同的数据值。例如,我正在寻找一种遍历列 Q2_1:Q2_10 的方法。目前,我正在以一种非常低效的方式执行此操作:

data %>% 
  filter(Q2_1 == 5) %>% 
  filter(Q2_2 == 5) %>% 
  filter(Q2_3 == 5) %>% 
  filter(Q2_4 == 5) %>% 
  filter(Q2_5 == 5) %>% 
  filter(Q2_6 == 5) %>% 
  filter(Q2_7 == 5) %>% 
  filter(Q2_8 == 5) %>% 
  filter(Q2_9 == 5) %>% 
  filter(Q2_10 == 5)

我不确定如何开始使用 lapply 或 tidyverse 方式。我应该将过滤器转换为函数还是将过滤器函数添加到循环中?

【问题讨论】:

    标签: r dplyr apply purrr


    【解决方案1】:

    你可以使用if_all -

    library(dplyr)
    
    data %>% filter(if_all(Q2_1:Q2_10, ~. == 5))
    

    【讨论】:

      【解决方案2】:

      这是一个起点:

      cols = c("Q2_1","Q2_2","Q2_3","Q2_4","Q2_5","Q2_6","Q2_7","Q2_8","Q2_9","Q2_10")
      
      for(col in cols){
        data = data %>%
          filter(!!sym(col) == 5)
      }
      

      注意cols是一个字符串数组,所以我们使用!!sym(.)将每个字符串变成一个R变量进行求值。此功能来自 rlang 包。

      还有其他方法可以做到这一点。有关其他选项和说明,请参阅 programming with dplyr 上的 tidyverse 指南。

      【讨论】:

      • 我喜欢这个!有没有办法循环遍历每一列而不是 cols = c("Q2_1", "Q2_2" . . .
      • 您可以使用cols = colnames(df) 循环遍历所有列。否则,您可以查看与 grepl 的模式匹配。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 2016-01-09
      • 1970-01-01
      • 2018-07-21
      • 2012-05-26
      • 2015-12-07
      • 1970-01-01
      相关资源
      最近更新 更多