140 votes

Comment calculer le nombre d'occurrences d'un caractère donné dans chaque ligne d'une colonne de chaînes de caractères ?

J'ai un data.frame dans lequel certaines variables contiennent une chaîne de texte. Je souhaite compter le nombre d'occurrences d'un caractère donné dans chaque chaîne individuelle.

Exemple :

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

Je souhaite créer une nouvelle colonne pour q.data avec le nombre d'occurrences de "a" dans la chaîne de caractères (par exemple c(2,1,0)).

La seule approche alambiquée que j'ai réussi à mettre en place est :

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

8voto

Une variante de https://stackoverflow.com/a/12430764/589165 est

> nchar(gsub("[^a]", "", q.data$string))
[1] 2 1 0

2voto

tim riffe Points 3323

Je suis sûr que quelqu'un peut faire mieux, mais ça marche :

sapply(as.character(q.data$string), function(x, letter = "a"){
  sum(unlist(strsplit(x, split = "")) == letter)
})
greatgreat      magic        not 
     2          1          0 

ou dans une fonction :

countLetter <- function(charvec, letter){
  sapply(charvec, function(x, letter){
    sum(unlist(strsplit(x, split = "")) == letter)
  }, letter = letter)
}
countLetter(as.character(q.data$string),"a")

1voto

Benbob Points 138

Vous pourriez simplement utiliser la division en chaînes

require(roperators)
my_strings <- c('apple', banana', 'pear', 'melon')
my_strings %s/% 'a'

Ce qui vous donnera 1, 3, 1, 0. Vous pouvez également utiliser la division de chaîne avec des expressions régulières et des mots entiers.

0voto

Yoshiaki Points 190

La question ci-dessous a été déplacée ici, mais il semble que cette page ne réponde pas directement à la question de Farah El. Comment trouver le nombre de 1 dans 101 en R

Je vais donc écrire une réponse ici, juste au cas où.

library(magrittr)
n %>% # n is a number you'd like to inspect
  as.character() %>%
  str_count(pattern = "1")

https://stackoverflow.com/users/8931457/farah-el

0voto

tmfmnk Points 8978

Encore un autre base R option pourrait être :

lengths(lapply(q.data$string, grepRaw, pattern = "a", all = TRUE, fixed = TRUE))

[1] 2 1 0

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X