使用R计算列中的重复单词

时间:2016-04-10 12:29:22

标签: r text analytics

我有一个带有'NAME'列的数据框,如下所示:

NAME                            
Cybermart co                                               
Hot burgers hot sandwiches                       
Landmark co                                   

我想在此数据框中添加一个新列,具体取决于: 是否在“名称”列中有任何重复的单词。 所以新专栏将是这样的:

REPEATED_WORD  
No  
Yes  
No

我有什么方法可以做到这一点吗?

3 个答案:

答案 0 :(得分:0)

我们可以分享名称' NAME'按空格列(\\s+),循环输出list并检查lengthunique元素是否与每个length相同{ {1}}元素获取逻辑list。将逻辑向量转换为"是","否" (如果需要)

vector

如果我们使用df1$REPEATED_WORD <- c("No", "Yes")[sapply(strsplit(df1$NAME, '\\s+'), function(x) length(unique(tolower(x)))!=length(x)) + 1L] df1$REPEATED_WORD #[1] "No" "Yes" "No" ,我们可以捕获非空白元素(regex)并使用正则表达式外观来检查是否有任何重复的单词。

(\\S+)

最好将其保留为逻辑矢量,而不是转换为&#34;是/否&#34;。如果需要,只需将1添加到逻辑向量(或使用library(stringi) stri_detect(tolower(df1$NAME), regex="(\\S+)(?=.*\\s+\\1\\s+)") #[1] FALSE TRUE FALSE )并将TRUE值更改为&#34;是&#34;和#34;否&#34; (如上所示)

答案 1 :(得分:0)

vapply(strsplit(tolower(x), "\\s+"), anyDuplicated, 1L) > 0L
#[1] FALSE  TRUE FALSE

答案 2 :(得分:0)

我对@ akrun的第二个(纯正则表达式)有类似的解决方案。我将把它放在以后对未来的搜索者有用的时候:

NAME <-                           
c('Cybermart co',
'Hot burgers hot sandwiches',
'Landmark co'
)

grepl("(?i)\\b(\\w+)\\s+.*\\1\\b", NAME, perl=TRUE)
## [1] FALSE  TRUE FALSE