我正在尝试编写向数据框添加新列的代码,返回已与不同列中的相应单元格匹配的模式。
例如,我有一个列,其中的值是一个字符串,混合了有用和无用的信息,如下所示:
data.frame(A = c("148apple32394", "386pear3", "23banana3808"))
A
1 148apple32394
2 386pear3
3 23banana3808
我想将此列与可能模式的向量进行比较,即:
patterns <- c("apple", "banana", "pear")
并返回一个包含任何匹配模式的新列,最终结果为:
A B
1 148apple32394 apple
2 386pear3 pear
3 23banana3808 banana
我知道
grep
不能很好地处理模式向量,那么有没有另一个好的函数可以工作?理想情况下,我想使用 mutate()
实施解决方案
谢谢!
您可以使用
str_extract
和被 |
折叠的模式来检测和提取这样的模式:
df = data.frame(A = c("148apple32394", "386pear3", "23banana3808"))
patterns <- c("apple", "banana", "pear")
library(dplyr)
library(stringr)
df %>%
mutate(B = str_extract(A, paste(patterns, collapse = "|")))
#> A B
#> 1 148apple32394 apple
#> 2 386pear3 pear
#> 3 23banana3808 banana
创建于 2023-03-10 与 reprex v2.0.2