Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用str_detect筛选多个列_R - Fatal编程技术网

使用str_detect筛选多个列

使用str_detect筛选多个列,r,R,我正在利用tidyverse中的函数str\u detect,过滤掉数据帧中与列表中任何字符串开头匹配的行。目前,在我的过滤器语句中的每一列之间进行过滤时,使用|语句。有没有办法在不使用or语句的情况下跨多个列使用str\u detect?下面我正在使用的代码可以工作,但不能扩展 Dataframe <- data.frame("names" = c('John','Jill','Joe','Mark'), "Jobs" = c('Mailman','Jockey','Jobhunter

我正在利用tidyverse中的函数
str\u detect
,过滤掉数据帧中与列表中任何字符串开头匹配的行。目前,在我的
过滤器
语句中的每一列之间进行过滤时,使用
|
语句。有没有办法在不使用or语句的情况下跨多个列使用
str\u detect
?下面我正在使用的代码可以工作,但不能扩展


Dataframe <- data.frame("names" = c('John','Jill','Joe','Mark'), "Jobs" = c('Mailman','Jockey','Jobhunter',"Nojob"))

Filter_list <- c('Jo')

Dataframe %>% filter(str_detect(names, paste0("^(", paste(Filter_list, collapse = "|"), ")")) |
                     str_detect(Jobs, paste0("^(", paste(Filter_list, collapse = "|"), ")"))

  names      Jobs
1  John   Mailman
2  Jill    Jockey
3   Joe Jobhunter)


Dataframe我会先将其转换为长数据,然后使用
str\u detect()

DF%变异(ID=row\u number())
索引%gather(键,值,-ID)%%>%过滤器(str\u detect(值,过滤器列表))
DF%>%筛选器(ID%在%unique中(索引$ID))

您可以在以下位置使用
过滤器:

Dataframe %>% filter_at(.vars = vars(names, Jobs),
                    .vars_predicate = any_vars(str_detect(. , paste0("^(", paste(Filter_list, collapse = "|"), ")"))))
如果要将筛选器应用于所有变量,则可以使用
filter\u all

Dataframe %>% filter_at(.vars = vars(names, Jobs),
                    .vars_predicate = any_vars(str_detect(. , paste0("^(", paste(Filter_list, collapse = "|"), ")"))))