使用R从向量中提取特定单词

时间:2012-04-11 07:32:52

标签: r

我有一个文本,例如

text<- "i am happy today :):)"

我想从文本向量中提取:)并报告其频率

3 个答案:

答案 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))
})

但我更喜欢其他答案。