我目前正在使用具有多个相似列的数据集: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 *之后加上括号时出现错误,甚至无法运行该节。有更好的方法吗?
答案 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)))
应该也可以正常工作
==