假设我有以下数据:
foo <- data.frame(Company = c("company1", "foo", "test", "food"), Metric = rnorm(4, 10))
> foo
Company Metric
1 company1 10.539970
2 foo 9.487823
3 test 9.663994
4 food 9.499327
为什么下面的代码返回0结果(而不是第二行和第四行)?
library(dplyr)
library(data.table)
foo %>% dplyr::filter(Company %like% "%foo%")
我尝试使用data.table
包中的%like%
操作符,对dplyr::filter
的特定输入字符串使用SQL等效通配符过滤器。
我哪里做错了?
6条答案
按热度按时间rdlzhqv91#
您可以用途:
输出:
正如Dhawal Kapil指出的,我认为
%like%
来自data.table:输出:
2j4z5cfb2#
您可以与库(stringr)一起使用
以及任何其他正则表达式
x3naxklr3#
想通了;我想我还是把它留着吧,以防将来对别人有帮助。
如果原始问题中
foo
周围没有"
s,则返回正确的data. frame。仍然不确定是否可以在SQL中使用%
作为锚(例如%foo
或foo%
),但上面的内容适用于我需要它做的事情。qxsslcnc4#
首先将该变量转换为所有记录的相同大小写
然后应用过滤器
这将给予公司可能是的子集:
kx5bkwkv5#
使用dplyr + SQL的替代方法:
通过sql()从dplyr中转义,你可以直接把原生SQL(取决于你的数据库风格)放到管道中:
bjp0bcyl6#
随着stringr1.5.0的更新,str_like()将使这样的过滤器变得轻而易举。
这将根据需要过滤行。