我有一个文本,例如
text<- "i am happy today :):)"
我想从文本向量中提取:)并报告其频率
答案 0 :(得分:5)
这是一个很容易概括的想法:
text<- c("i was happy yesterday :):)",
"i am happy today :)",
"will i be happy tomorrow?")
(nchar(text) - nchar(gsub(":)", "", text))) / 2
# [1] 2 1 0
答案 1 :(得分:3)
我假设您只想要计数,或者您是否也想从字符串中删除:)
?
您可以做的计数:
length(gregexpr(":)",text)[[1]])
给出2.对于字符串向量的更通用的解决方案是:
sapply(gregexpr(":)",text),length)
Josh O'Brien指出,由于:)
在这种情况下返回gregexpr
,因此还会返回1 -1
。要解决此问题,您可以使用:
sapply(gregexpr(":)",text),function(x)sum(x>0))
哪个稍微不那么漂亮。
答案 2 :(得分:1)
这样做可能不是最直接的方法:
mytext<- "i am happy today :):)"
# The following line inserts semicolons to split on
myTextSub<-gsub(":)", ";:);", mytext)
# Then split and unlist
myTextSplit <- unlist(strsplit(myTextSub, ";"))
# Then see how many times the smiley turns up
length(grep(":)", myTextSplit))
修改强>
处理长度为&gt;的文本向量1,不要取消登记:
mytext<- rep("i am happy today :):)",2)
myTextSub<-gsub(":\\)", ";:\\);", mytext)
myTextSplit <- strsplit(myTextSub, ";")
sapply(myTextSplit,function(x){
length(grep(":)", x))
})
但我更喜欢其他答案。