假设我有以下内容:
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
Run Code Online (Sandbox Code Playgroud)
为什么dplyr::filter返回0结果?(而不是第2和第4行)我正在尝试在特定的输入字符串上使用SQL等效的通配符过滤器%like%.
我究竟做错了什么?
mpa*_*nco 14
您可以使用:
filter(foo, grepl("foo", Company, fixed = TRUE))
Run Code Online (Sandbox Code Playgroud)
输出:
Company Metric
1 foo 9.906805
2 food 10.464493
Run Code Online (Sandbox Code Playgroud)
正如Dhawal Kapil指出的那样,我认为%like%是来自data.table:
library(data.table)
DT <- data.table(foo)
DT[Company %like% 'foo']
Run Code Online (Sandbox Code Playgroud)
输出:
Company Metric
1: foo 9.906805
2: food 10.464493
Run Code Online (Sandbox Code Playgroud)
小智 12
你可以使用库(stringr)
library(dplyr)
library(stringr)
foo <- data.frame(Company = c("company1", "foo", "test", "food"), Metric = rnorm(4, 10))
foo %>% filter(str_detect(Company,"foo"))
Run Code Online (Sandbox Code Playgroud)
以及任何其他正则表达式
foo %>% filter(str_detect(Company,"^f"))
Run Code Online (Sandbox Code Playgroud)
弄清楚了; 我会留下这个,以防将来帮助其他人:
foo <- foo %>% dplyr::filter(Company %like% "foo")
Run Code Online (Sandbox Code Playgroud)
如果没有原始问题中的"s foo,则返回正确的data.frame.仍然不确定你是否可以%在SQL中使用它作为锚(例如%foo或者foo%),但上面的工作是我需要它做的.