Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-全部或部分字符串匹配?_R - Fatal编程技术网

R-全部或部分字符串匹配?

R-全部或部分字符串匹配?,r,R,我有一个推特数据框架,用于我正在进行的情绪分析。我想删除对一些专有名称的引用(例如,“Jeff Smith”)。有没有办法在同一命令中删除对名称的全部或部分引用?现在,我正在做一个漫长的过程: library(stringr) str_detect(text, c('(Jeff Smith) | (Jeff) | (Smith)' )) 但当我添加更多的名字时,这显然变得很麻烦。理想情况下,有一种方法可以只喂养“杰夫·史密斯”,然后能够匹配全部或部分内容。有人有什么想法吗 如果您想使用它,请提

我有一个推特数据框架,用于我正在进行的情绪分析。我想删除对一些专有名称的引用(例如,“Jeff Smith”)。有没有办法在同一命令中删除对名称的全部或部分引用?现在,我正在做一个漫长的过程:

library(stringr)
str_detect(text, c('(Jeff Smith) | (Jeff) | (Smith)' ))
但当我添加更多的名字时,这显然变得很麻烦。理想情况下,有一种方法可以只喂养“杰夫·史密斯”,然后能够匹配全部或部分内容。有人有什么想法吗

如果您想使用它,请提供一些示例代码:


tweets = data.frame(text = c('Smith said he’s not counting on Monday being a makeup day.', 
                   "Williams says that Steve Austin will miss the rest of the week",
                   "Weird times: Jeff Smith just got thrown out attempting to steal home",
                   "Rest day for Austin today",
                   "Jeff says he expects to bat leadoff", "Jeff", "No reference to either name"))
                   
name = c("Jeff Smith", "Steve Austin")

不是一种美,但它是有效的

#example data
namelist <- c('Jeff Smith', 'Kevin Arnold')

namelist_spreaded <- strsplit(namelist, split = ' ')

f <- function(x) {
  paste0('(',
         paste(x, collapse = ' '),
         ') | (',
         paste(x, collapse = ') | ('),
         ')')
}
lapply(namelist_spreaded, f)
#示例数据

姓名列表根据显示的数据,所有这些都应该是正确的

library(dplyr)
library(stringr)
pat <-  str_c(gsub(" ", "\\b|\\b", str_c("\\b", name, "\\b"),
       fixed = TRUE), collapse="|")

tweets %>% 
      mutate(ind = str_detect(text, pat))

请尝试
'\\bJeff\\b.*\\bSmith'
@akrun您将其放入什么命令中以查找具有该模式的所有字符串?如果您可以提供一个小的可复制文本示例和预期输出,请test@akrun我在原来的帖子里加了一些但是,这不是也会匹配像杰夫·奥斯汀(Jeff Austin)这样的东西吗?这似乎是在帕特·D·布莱恩特(pat.@D.Bryant)的名字之外拾取东西。你能试试新的模式吗?是的,仍然拾取外部模式。例如,它拾取的tweet实际上只是超链接。@D.Bryant您是否可以更新示例文本,如当前示例中所示,所有行的“name”中都有这些值我明白了原因。首先,你让你的str_检测到一个突变,而我正试图用它来过滤。一旦我改变了那一步,它就成功了。至于它对单个单词不起作用,我意识到我的工作流程正在改变,将tweet拆分为单词,并使用“to_lower”。你的命令区分大小写,但我所有的字都是小写的。将名称更改为lowers,它可以工作。所以你的解决方案就是赢家!非常感谢你今天的帮助!给你一颗金星!
#                                                               text   ind
#1           Smith said he’s not counting on Monday being a makeup day.  TRUE
#2       Williams says that Steve Austin will miss the rest of the week  TRUE
#3 Weird times: Jeff Smith just got thrown out attempting to steal home  TRUE
#4                                            Rest day for Austin today  TRUE
#5                                  Jeff says he expects to bat leadoff  TRUE
#6                                                                 Jeff  TRUE
#7                                          No reference to either name FALSE