考虑以下示例
> data_text <- data.frame(text = c('where', 'are', 'you'),
blob = c('little', 'nice', 'text'))
> data_text
# A tibble: 3 x 2
text blob
<chr> <chr>
1 where little
2 are nice
3 you text
我想打印包含正则表达式text
的行(即第3行)
问题是,我有数百列,我不知道哪一列包含这个字符串。 str_detect
一次只能使用一列...
如何使用stringr
包来做到这一点?
谢谢!
答案 0 :(得分:6)
使用stringr
和dplyr
,您可以执行此操作。
您应该使用filter_all
中的dplyr >= 0.5.0
。
我已扩展数据以更好地了解结果:
library(dplyr)
library(stringr)
data_text <- data.frame(text = c('text', 'where', 'are', 'you'),
one_more_text = c('test', 'test', 'test', 'test'),
blob = c('wow', 'little', 'nice', 'text'))
data_text %>%
filter_all(any_vars(str_detect(., 'text')))
# output
text one_more_text blob
1 text test wow
2 you test text
答案 1 :(得分:4)
您可以将data.frame视为列表,并使用purrr::map
检查每一列,然后reduce
d成filter
可以处理的逻辑向量。或者,purrr::pmap
可以并行迭代所有列:
library(tidyverse)
data_text <- data_frame(text = c('where', 'are', 'you'),
blob = c('little', 'nice', 'text'))
data_text %>% filter(map(., ~.x == 'text') %>% reduce(`|`))
#> # A tibble: 1 x 2
#> text blob
#> <chr> <chr>
#> 1 you text
data_text %>% filter(pmap_lgl(., ~any(c(...) == 'text')))
#> # A tibble: 1 x 2
#> text blob
#> <chr> <chr>
#> 1 you text
答案 2 :(得分:3)
matches = apply(data_text,1,function(x) sum(grepl("text",x)))>0
result = data_text[matches,]
无需其他套餐。希望这有帮助!