如何计算字符串列每行中给定字符的出现次数?

我有一个data.frame,其中某些变量包含文本字符串。我希望计算每个字符串中给定字符的出现次数。


例:


q.data<-data.frame(number=1:3, string=c("greatgreat", "magic", "not"))

我希望为q.data创建一个新列,其中包含字符串中“a”的出现次数(即c(2,1,0))。


我管理的唯一令人费解的方法是:


string.counter<-function(strings, pattern){  

  counts<-NULL

  for(i in 1:length(strings)){

    counts[i]<-length(attr(gregexpr(pattern,strings[i])[[1]], "match.length")[attr(gregexpr(pattern,strings[i])[[1]], "match.length")>0])

  }

return(counts)

}


string.counter(strings=q.data$string, pattern="a")


 number     string number.of.a

1      1 greatgreat           2

2      2      magic           1

3      3        not           0


胡子哥哥
浏览 1152回答 3
3回答

繁华开满天机

stringr包提供了str_count似乎做你感兴趣的功能# Load your example dataq.data<-data.frame(number=1:3, string=c("greatgreat", "magic", "not"), stringsAsFactors = F)library(stringr)# Count the number of 'a's in each element of stringq.data$number.of.a <- str_count(q.data$string, "a")q.data#&nbsp; number&nbsp; &nbsp; &nbsp;string number.of.a#1&nbsp; &nbsp; &nbsp; 1 greatgreat&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2#2&nbsp; &nbsp; &nbsp; 2&nbsp; &nbsp; &nbsp; magic&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1#3&nbsp; &nbsp; &nbsp; 3&nbsp; &nbsp; &nbsp; &nbsp; not&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0

哆啦的时光机

如果你不想离开基地R,这里有一个相当简洁和富有表现力的可能性:x <- q.data$stringlengths(regmatches(x, gregexpr("a", x)))# [1] 2 1 0
打开App,查看更多内容
随时随地看视频慕课网APP