使用R计算字符串中的积极微笑

使用R计算字符串中的积极微笑,r,string,R,String,在src$Review中,每行用俄语填写文本。我想数一数每行中积极微笑的数量。例如,在“My Aprict is orange”(我的杏子是橙色的))(当然)“我不仅要计算出站括号的数量(即,不包括“(当然)”中的一般括号),还要计算积极微笑字符的数量(“)”—至少两个出站括号,数量“:”,“:-”)。因此,它只有在至少显示两个出站括号时才有效 假设有一个字符串“我爱这个女孩!)))(她让我开心)每天:):::-!“在这里我们计算:))(4个单位),“:)”(2个单位),“:-”(1个单位)。在

在src$Review中,每行用俄语填写文本。我想数一数每行中积极微笑的数量。例如,在“My Aprict is orange”(我的杏子是橙色的))(当然)“我不仅要计算出站括号的数量(即,不包括“(当然)”中的一般括号),还要计算积极微笑字符的数量(“)”—至少两个出站括号,数量“:”,“:-”)。因此,它只有在至少显示两个出站括号时才有效

假设有一个字符串“我爱这个女孩!)))(她让我开心)每天:):::-!“在这里我们计算:))(4个单位),“:)”(2个单位),“:-”(1个单位)。在我们合并单元数(即7)之后。请注意,我们不计算“(她让我快乐)”中的括号

现在,我的脚本中有以下代码:

smilecounts <- str_count(src$Review, "[))]")

smilecounts我们可以使用regex lookarounds提取
:=
后面的
,然后使用
length
获取计数

length(str_extract_all(str1, '(?<=\\)|\\!)\\)')[[1]])
#[1] 4

length(str_extract_all(str1, '(?<=:)\\)')[[1]])
#[1] 2

length(str_extract_all(str1, '(?<=:-)\\)')[[1]])
#[1] 1

length(str\u extract\u all(str1),(?单向与
regexpr
regmatches

vec <- "I love this girl!)))) (she makes me happy) every day:):) :-)!"
或者以更自动化的方式:

tab <- table(b)
#the following means "if a name of the table consists only of ) then 
#count the number of )s"
tab2 <- ifelse(gsub(')','', names(table(b)))=='', nchar(names(table(b))), table(b))
names(tab2) <- names(tab)

> tab2
))))  :-)   :) 
   4    1    2 

tab请提供一些示例字符串和您所需的确切输出。假设有一个字符串“我爱这个女孩!))(她让我开心)每天:):)::-!“这里我们计算:)))(4个单位),“:)”(2个单位),“:-)(1个单位)。在我们合并单元数(即7)之后。请注意,我们不计算“(她让我高兴)”中的括号。请自行编辑问题。@RuslanSeletskiy我们可以使用
lappy
循环模式,然后使用
Reduce(
+
,…)
获得7的总和。我在一辆公共汽车上,因此不使用鼠标就不容易复制/粘贴:-)尝试
pat@RuslanSeletskiy我得到了您使用示例显示的确切结果。所以,我不知道你的意思是什么不起作用。我的意思是上面帖子中的代码不起作用。它显示为“0L”。@RuslanSeletskiy抱歉,我无法复制我正试图以这种方式使用它“微笑计数”为什么要使用
stru计数
?以上这些难道不是你所需要的吗?不同的函数对regex的作用不同。上面的
ifelse
可以与表一起正常工作。你是在尝试实现其他目标吗?是的,我需要准确地使用
str\u count
。这也不起作用
smilecounts我没有使用
str\u count
的经验。您还应该在问题中提到,您只想使用
str\u count
vec <- "I love this girl!)))) (she makes me happy) every day:):) :-)!"
#matches the locations of :-) or ))+ or :)
a <- gregexpr(':-)+|))+|:)+', vec)
#extracts those
b <- regmatches(vec, a)[[1]]
b
#[1] "))))" ":)"   ":)"   ":-)" 
#table counts the instances
b
))))  :-)   :) 
   1    1    2 
nchar(b[1])
[1] 4
tab <- table(b)
#the following means "if a name of the table consists only of ) then 
#count the number of )s"
tab2 <- ifelse(gsub(')','', names(table(b)))=='', nchar(names(table(b))), table(b))
names(tab2) <- names(tab)

> tab2
))))  :-)   :) 
   4    1    2