计算连续的唯一字符串模式

时间:2018-04-24 08:03:46

标签: r stringi

我有一个以下例子:

dat <- read.table(text="index  string
1      'I have first and second'
2      'I have first, first'
3      'I have second and first and thirdeen'", header=TRUE)


toMatch <-  c('first', 'second', 'third')

dat$count <- stri_count_regex(dat$string, paste0('\\b',toMatch,'\\b', collapse="|"))

dat

index                               string count
1     1              I have first and second     2
2     2                  I have first, first     2
3     3 I have second and first and thirdeen     2

我想在数据框中添加一个列数,它会告诉我每行有多少个UNIQUE字。在这种情况下,期望的输出是

index                               string count
1     1              I have first and second     2
2     2                  I have first, first     1
3     3 I have second and first and thirdeen     2

请您给我一个如何修改原始配方的提示?非常感谢你

2 个答案:

答案 0 :(得分:2)

使用基数R,您可以执行以下操作:

sapply(dat$string, function(x) 
    {sum(sapply(toMatch, function(y) {grepl(paste0('\\b', y, '\\b'), x)}))})

返回

[1] 2 1 2

希望这有帮助!

答案 1 :(得分:1)

我们可以使用stri_match_all代替它,它会为我们提供完全匹配,然后使用基数中的n_distinctlength(unique(x))来计算不同的值。

library(stringi)
library(dplyr)
sapply(stri_match_all(dat$string, regex = paste0('\\b',toMatch,'\\b',
                    collapse="|")), n_distinct)

#[1] 2 1 2

或类似基础R

sapply(stri_match_all(dat$string, regex = paste0('\\b',toMatch,'\\b',
         collapse="|")), function(x) length(unique(x)))

#[1] 2 1 2