Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.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
Sql R:用于多列中字符串的高效过滤器_Sql_R_Dplyr - Fatal编程技术网

Sql R:用于多列中字符串的高效过滤器

Sql R:用于多列中字符串的高效过滤器,sql,r,dplyr,Sql,R,Dplyr,我有一个名称的数据框(第一个和最后一个,有些大写,有些不大写)和与每个名称相关的分数: df = data.frame(name = c("Mark Johnson","John Roberts","Sue mcguire","kat Long","dan Scott"), name2 = c("sam marks", "Mark Jones", "tim briar", "jonas Stark", "Mike Robinson"), score = c(2,3,4,5,5)) name

我有一个名称的数据框(第一个和最后一个,有些大写,有些不大写)和与每个名称相关的分数:

df = data.frame(name = c("Mark Johnson","John Roberts","Sue mcguire","kat Long","dan Scott"), name2 = c("sam marks", "Mark Jones", "tim briar", "jonas Stark", "Mike Robinson"), score = c(2,3,4,5,5))

  name             name2         score
1 Mark Johnson     sam marks     2
2 John Roberts    Mark Jones     3
3  Sue mcguire     tim briar     4
4     kat Long   jonas Stark     5
5    dan Scott Mike Robinson     5
我希望能够只通过包含任一列的名字或姓氏来筛选我的数据帧,例如:

    df %>% filter(name %in% c("mark","john","Long","briar"))
我希望避免使用
grepl
,而是使用
filter
和%中的
%。然而,这返回:

[1] name  score
<0 rows> (or 0-length row.names)
[1]姓名分数
(或长度为0的行名称)

而不是第1、2、3和4行<代码>名称|名称2
也不起作用。可能是因为我需要在
name
name2
列中执行
strsplit()
或类似操作,然后重新组合。然而,这不是很优雅,而且我的
df
实际上有数百万行,因此性能对我来说很重要。实现这一目标的最佳方式是什么

我们可以在

pat <- paste(c("mark","john","Long","briar"), collapse="|")
df %>% 
   filter_at(vars(matches('name')), any_vars(grepl(pat, ., ignore.case = TRUE)))
pat%
过滤变量(匹配('name')),任何变量(grepl(pat,,,ignore.case=TRUE)))

如果模式应该匹配两个列,那么将
任何变量
替换为
所有变量

如果my
df
是sqlite表,这是否可行?这就是为什么我要避免使用
grepl
,因为它不兼容。这是我指的链接:@战舰存在不兼容问题非常糟糕。如果要使用%in%,则可能需要使用
separate
将列拆分为两列。顺便问一下,所有的L函数都可以使用哪些sqlite@warship根据链接,
%like%
应该可以工作。如果您尝试过,那么仍然会存在与
grepl
和SQL不兼容的问题:(我同意不兼容的问题,也许@hadley会看到这个问题并揭开谜底。。。