【问题标题】:writing a scoped filter function in dplyr在 dplyr 中编写作用域过滤器函数
【发布时间】:2018-01-03 06:35:58
【问题描述】:

我正在尝试编写一个使用 dplyr 的 filter_at 的函数。我的数据集包括名为 pr1:pr15 的列(所有 chr 变量的值都为“8201”或“0599”),我正在尝试构建一个过滤器,其中包含在任何 col p1:pr15 中具有值 x 的任何行

这是我尝试过的: my_filterfunc <- function(data, x) {data %>% filter_at(vars(starts_with(regex("pr[0:9]"))), any_vars(. == "x"))}

当我尝试这样运行这个函数时: test &lt;- my_fiterfunc(my_tibble, x = "8201")

我收到一个错误:Error: .predicate has no matching columns 即使我知道有匹配的列

【问题讨论】:

    标签: r function dplyr


    【解决方案1】:

    我们不需要在“x”周围加上引号,而且使用matches 更容易

    my_filterfunc <- function(data, x) {
    data %>% 
       filter_at(vars(matches("^pr\\d+")), any_vars(. == x))
     }
    
    my_filterfunc(df1, "8201")
    #  ID  pr1  pr2  pr3  pr4  pr5  pr6  pr7  pr8  pr9 pr10
    #1  3 8211 8212 8211 8201 8211 8209 8206 8210 8205 8206
    #2  5 8210 8204 8205 8203 8204 8201 8215 8215 8201 8206
    

    数据

    set.seed(24)
    df1 <- data.frame(ID = 1:5, matrix(sample(as.character(8201:8215), 5*10, replace = TRUE),
                     5, 10, dimnames = list(NULL, paste0("pr", 1:10))), stringsAsFactors = FALSE)
    

    【讨论】:

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