我有一个杂文包含这样的句子:
df <- tibble(sentences = c("Bob is looking for something", "Adriana has an umbrella", "Michael is looking at..."))
另一个里面有一长串名字:
names <- tibble(names = c("Bob", "Mary", "Michael", "John", "Etc."))
我想看看这些句子是否包含列表中的一个名字,并添加一列来指示是否是这种情况,然后得到下面的tibble:
wanted_df <- tibble(sentences = c("Bob is looking for something", "Adriana has an umbrella", "Michael is looking at..."), check = c(TRUE, FALSE, TRUE))
到目前为止,我已经试过了,但没有成功:
df <- df %>%
mutate(check = grepl(pattern = names$names, x = df$sentences, fixed = TRUE))
并且:
check <- str_detect(names$names %in% df$sentences)
非常感谢你的帮助)
4条答案
按热度按时间jhkqcmku1#
您应该在
grepl
中构造一个正则表达式:euoag5mw2#
这是一个R基溶液。
创建于2023年1月11日,使用reprex v2.0.2
wqsoz72f3#
grep
和family期望pattern=
的长度为1。类似地,str_detect
需要相同长度的 * 字符串 *,而不是逻辑向量,因此不能按原样工作。我们有几个选择:
sapply
(矩阵),并查看每行是否有一个或多个匹配项:(我现在明白了,这是鲁伊·巴拉达斯的回答。)
fuzzyjoin
对数据执行模糊连接:这种方法的一个优点是,它可以告诉您哪个模式(在
names
中)进行了匹配。bxpogfeg4#
也许我们可以尝试
adist
+colSums
,如下所示它给出了