我有一个以下例子:
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
请您给我一个如何修改原始配方的提示?非常感谢你
答案 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_distinct
或length(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