我正在尝试编写一个使用dplyr的filter_at的函数。我的数据集包括名为pr1:pr15的列(所有chr变量的值如“8201”或“0599”),我正在尝试构建一个过滤器,其中包含在任何col p1中具有值x的任何行:pr15
这是我尝试过的:
my_filterfunc <- function(data, x) {data %>%
filter_at(vars(starts_with(regex("pr[0:9]"))), any_vars(. == "x"))}
当我尝试运行此函数时:
test <- my_fiterfunc(my_tibble, x = "8201")
我收到错误:Error: .predicate has no matching columns
即使我知道有匹配的列
答案 0 :(得分:2)
我们不需要引用&#39; x&#39;并且使用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)