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