2017-08-17 1 views
0

Comment trouver le nombre d'occurrences d'une liste de mots? Je peux chercher un mot comme suit:Comment rechercher le nombre d'occurrences de mots individuels dans des données de texte?

dplyr::filter(data, grepl("apple", data$content,ignore.case = TRUE)) 
length(x$content) 

Le séparateur | me permet de résumer toutes les occurrences. Mais je veux compter chaque mot individuellement.

Les mots pourraient être fournis en ligne dans un fichier CSV ou écrit comme vecteur dans R lui-même, par exemple:

words <- c("apple","orange","pear","pineapple") 

Une ride est que la data$count sont une colonne de tweets de sorte que le mot peut se produire plus qu'une fois par tweet. Donc, je voudrais compter seulement si elles se produisent dans la rangée.

+0

Voir 'stringr :: str_count' – www

Répondre

1

Vous pouvez obtenir logical valeurs pour la présence/absence de vos mots cibles comme ceci:

library(tidyverse) 

words <- c("apple","orange","pear","pineapple") 

data <- tibble(content = c("Ony my grocery list are green apples, red apples and oranges", 
          "My favorite froyo flavors are pineapple, peach-pear and pear")) 

boundary_words <- paste0("\\b", words) # if you want to avoid counting the apple in pineapple 

map_dfc(boundary_words, ~ as.tibble(grepl(., data$content))) %>% 
    set_names(words) %>% 
    bind_cols(data, .) 

# A tibble: 2 x 5 
                 content apple orange pear pineapple 
                 <chr> <lgl> <lgl> <lgl>  <lgl> 
1 Ony my grocery list are green apples, red apples and oranges TRUE TRUE FALSE  FALSE 
2 My favorite froyo flavors are pineapple, peach-pear and pear FALSE FALSE TRUE  TRUE 
+0

Grande , Je vous remercie. Une extension ajoutée a été de nommer l'objet 'newdata' et de compter le nombre de 'TRUE dans la colonne correspondante avec' apply (X = newdata [9:12], 2, FUN = longueur de fonction (x) (x = = 'VRAI'))) ' –

0

Utilisation du package stringr ...

library(stringr) 
words <- c("apple","orange","pear","pineapple") 

data <- c("On my grocery list are green apples, red apples and oranges", 
      "Oranges are my favourite, but I also like pineapples and pearls") 

sapply(words,function(w) 
     str_count(str_to_lower(str_split(data," ")), #split into words and set to lower case 
       paste0("\\b",w,"s*\\b"))) #adds word boundaries and optional plural -s 

    apple orange pear pineapple 
[1,]  2  1 0   0 
[2,]  0  1 0   1 

This allows for capital letters, and should only count whole words (perhaps with an -s plural).