使用R从向量中提取指定字
我有一篇课文使用R从向量中提取指定字,r,R,我有一篇课文 text<- "i am happy today :):)" text这是一个技巧,但可能不是最直接的方法: mytext<- "i am happy today :):)" # The following line inserts semicolons to split on myTextSub<-gsub(":)", ";:);", mytext) # Then split and unlist myTextSplit <- unlist(strs
text<- "i am happy today :):)"
text这是一个技巧,但可能不是最直接的方法:
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))
mytext这里有一个想法,很容易概括:
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
text我假设您只需要计数,还是还要从字符串中删除:)
对于计数,您可以执行以下操作:
length(gregexpr(":)",text)[[1]])
这等于2。字符串向量的更普遍的解决方案是:
sapply(gregexpr(":)",text),length)
编辑:
Josh O'Brien指出,在这种情况下,gregexpr
返回-1
,因此这也返回了其中的1个。要解决此问题,您可以使用:
sapply(gregexpr(":)",text),function(x)sum(x>0))
它确实变得不那么漂亮了。你也可以对一个nchar()
调用使用相反的方法:nchar(gsub(“[^:)]”,“”,text))/2
@SachaEpskamp——不幸的是,这并不能做完全相同的事情,因为它会替换除字符:
和)之外的所有字符,当您确实想要替换除字符串以外的所有内容时:)
。用文本试试你的想法,谢谢。我对正则表达式相当陌生。我觉得这样行吗nchar(gsub(“^((?!:\\))*”,“”,text,perl=TRUE))/2
在我看来很不错,尽管我在理解一些细节方面有点困难,比如为什么需要“^”
,为什么文本中的所有)
都没有匹配和删除。这是一个很好的主意,但是它需要做更多的工作,因为对于不包含任何“:)”
字符串的字符串,它会失败。(使用text Cool试用你的函数。我将把它作为gregexpr()
擅长的问题的一个很好的例子存档。
sapply(gregexpr(":)",text),function(x)sum(x>0))