跨多个列的grepl-通配符不起作用

时间:2018-09-17 14:50:49

标签: r grep wildcard grepl

我目前正在使用具有多个相似列的数据集:item1,item2等到item8。在我编写的函数中,我创建了一个特定的搜索,用作ifelse函数的第一个参数,该函数在以下任何列中搜索短语:

grepl(exact_name, item1) | grepl(exact_name, item2) | grepl(exact_name, item3) | grepl(exact_name, item4) | grepl(exact_name, item5) | grepl(exact_name, item6) | grepl(exact_name, item7) | grepl(exact_name, item8)

这很好用,但是我希望能够将此功能应用于具有未知数目的项目列的数据框(使用的所有数据框将至少有一个项目列,如果确实只有一个项目列,它将仍然采用item1格式,而不仅仅是item)。我已经尝试过使用*通配符,如下所示:

grepl(exact_name, item*)

但是在item *之后加上括号时出现错误,甚至无法运行该节。有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

如果item\\d+是全局环境中的对象,我们可以使用mget获取list中的对象,然后遍历list,应用{{ 1}},并将其grepl转换为单个逻辑Reduce

vector

如果Reduce(`|`,lapply(mget(ls(pattern = "^item\\d+$")), grepl, pattern = exact_name)) 是数据集中的列,请使用item\\d+

filter_at

此外,如果我们不进行部分匹配,那么library(dplyr) df1 %>% filter_at(vars(matches("^item\\d+$")), any_vars(str_detect(., exact_name))) 应该也可以正常工作

==