r - 如何确定向量中有多少元素包含来自第二个向量的模式?
问题描述
我试图确定一个向量是否包含多个模式。我有向量names
和patterns
.
对于一个简单的例子,我有:
names <- c("john_burgess", "pablo_gorges", "pear_trapper", "john_vaccant")
我想知道其中的哪些元素names
包含以下模式之一:
patterns<- c("john", "gorge")
我的实际数据包括一个names
[1:1126] 的patterns
向量和一个 [1:1163] 的向量。我一次只能使用一种模式,例如“john”,但我想一次使用所有模式。我想要的输出看起来像这样(这样我就可以继续进行进一步的分析):
names patterns
john_burgess john
john_vaccant john
pablo_gorges gorge
grep
我在浏览、stringr::str_extract
和帮助文件时迷失了方向,dplyr::filter
只有在我尝试使用多个模式时才会出现错误。我已经删除了 _ names
,它没有任何区别。我知道这一定是可能的,而且它可能是一个简单的编码,但我就是无法让它工作。对不起,如果这个问题已经被问到并得到了回答(如果是这样,请指点我)!我真的很感激朝着正确的方向轻推。提前致谢!
解决方案
这是一个选项tidyverse
library(purrr)
library(tibble)
library(stringr)
map(set_names(patterns, patterns), ~
names[str_detect(names, .x)], .id = 'patterns') %>%
enframe(name = "patterns", value = "names") %>%
unnest(c(names))
# A tibble: 3 x 2
# patterns names
# <chr> <chr>
#1 john john_burgess
#2 john john_vaccant
#3 gorge pablo_gorges
或使用base R
stack(lapply(setNames(patterns, patterns), grep, x = names, value = TRUE))
推荐阅读
- c# - 如何从json数组中提取数据并将其放入数据gridview c#
- rest - 金融科技/银行应用程序上可能的 API 授权技术
- android - 在主线程上运行 coroutine 或 rx observable 完成了什么
- docker - Docker 使用项目路径运行
- vba - 通过 VBA 添加宏动作会重置动画时间轴
- php - 无法安装干预/图像库
- android - 如何将我自己的画布设置为 PdfDocument.Page
- json - 如何使用 python 将 Mongodb Extended json 转换为 json 格式,比如好的 json?
- python - python,docx,使用 docx 模块时我的代码会出现什么错误
- java - 无法在 android 内部存储中创建文件夹