R-查找字符串并基于其他字符串排除

R-查找字符串并基于其他字符串排除,r,R,我找不到如何计算数据框中的单词并排除是否找到其他单词的答案。 我得到以下数据: words <- c("INSTANCE find", "LA LA LA", "instance during", "instance", "instance", "instance", "find instance") df <- data.frame(words) df$words_count <- grepl("instance", df$words, ignore.

我找不到如何计算数据框中的单词并排除是否找到其他单词的答案。 我得到以下数据:

words <- c("INSTANCE find", "LA LA LA", "instance during",
           "instance", "instance", "instance", "find instance")

df <- data.frame(words)
df$words_count <- grepl("instance", df$words, ignore.case = T)

words我肯定有一个使用单个正则表达式的解决方案,但您可以这样做

df$words_count <- Reduce(`-`, lapply(c('instance', 'find'), grepl, df$words)) > 0
df$words\u计数0

df$words\u计数%
减少(`&`)

我确信有一种解决方案使用单个正则表达式,但您可以这样做

df$words_count <- Reduce(`-`, lapply(c('instance', 'find'), grepl, df$words)) > 0
df$words\u计数0

df$words\u计数%
减少(`&`)

如果您只需要“实例”在字符串中出现的次数,则如果在任何地方找到“查找”,则会对该字符串中的所有内容求反:

df$counts <- sapply(gregexpr("\\binstance\\b", words, ignore.case=TRUE), function(a) length(a[a>0])) *
  !grepl("\\bfind\\b", words, ignore.case=TRUE)
df
#             words counts
# 1   INSTANCE find      0
# 2        LA LA LA      0
# 3 instance during      1
# 4        instance      1
# 5        instance      1
# 6        instance      1
# 7   find instance      0
df$counts 0]))*
!grepl(“\\bfind\\b”,单词,忽略。大小写=TRUE)
df
#话很重要
#1实例查找0
#2拉拉0
#第1阶段中的3个实例
#4实例1
#5实例1
#6实例1
#7查找实例0

如果您只需要“实例”在字符串中出现的次数,则如果在任何地方找到“查找”,则会对该字符串中的所有内容求反:

df$counts <- sapply(gregexpr("\\binstance\\b", words, ignore.case=TRUE), function(a) length(a[a>0])) *
  !grepl("\\bfind\\b", words, ignore.case=TRUE)
df
#             words counts
# 1   INSTANCE find      0
# 2        LA LA LA      0
# 3 instance during      1
# 4        instance      1
# 5        instance      1
# 6        instance      1
# 7   find instance      0
df$counts 0]))*
!grepl(“\\bfind\\b”,单词,忽略。大小写=TRUE)
df
#话很重要
#1实例查找0
#2拉拉0
#第1阶段中的3个实例
#4实例1
#5实例1
#6实例1
#7查找实例0

您能告诉我们您的预期输出应该是什么样子吗?您能告诉我们您的预期输出应该是什么样子吗?谢谢Renu。我使用第一个代码,还添加了第二个单词作为排除项。再次感谢。我的代码现在是:
df$words\u count谢谢Renu。我使用第一个代码,还添加了第二个单词作为排除项。再次感谢。我的代码现在是:
df$words\u count谢谢@r2evans。您可以从上面看到,您的代码适用于find,但也将LA作为一个。已更新(未看到)。谢谢。您可以在代码中添加另一个排除吗?我试图排除任何使用单词during的行,并在下面使用:
df$counts 0])*!grepl(“\\bfind\\b”,单词,忽略。大小写=TRUE)*!grepl(“\\b期间\\b”,单词,忽略。大小写=TRUE)
df$counts 0])*!grepl(“\\bfind\\b”,“\\b在\\b”,words,ignore.case=TRUE)
但是运气不好。我想您可以将第二个元素更新为
!grepl(\\b(find | during)\\b),words,ignore.case=TRUE)
。如果您希望列表是动态的,那么
exc谢谢@r2evans。您可以从上面看到,您的代码适用于find,但也将LA作为一个。已更新(未看到)。谢谢。您可以在代码中添加另一个排除吗?我试图排除任何使用单词during的行,并在下面使用:
df$counts 0])*!grepl(“\\bfind\\b”,单词,忽略。大小写=TRUE)*!grepl(“\\b期间\\b”,单词,忽略。大小写=TRUE)
df$counts 0])*!grepl(“\\bfind\\b”,“\\b在\\b”,words,ignore.case=TRUE)
但是运气不好。我想您可以将第二个元素更新为
!grepl(\\b(find | during)\\b),words,ignore.case=TRUE)
。如果您希望列表是动态的,那么
excl