Zählen Sie die Häufigkeit von Wörterbuchwörtern in einer Spalte und generieren Sie eine neue "dictfreq" -Spalte

Nov 24 2020

Scheint ein einfacher Befehl zu sein, aber ich kann anscheinend keinen guten Weg finden, dies in R zu generieren. Grundsätzlich möchte ich nur die Häufigkeit jedes Wortes in einem Wörterbuch zählen, diktieren, in der Spalte eines anderen Datenrahmens, wordsgov:

dict = "apple", "pineapple","pear"
df$wordsgov = "i hate apple", "i hate apple", "i love pear", "i don't like pear", "pear is okay", "i eat pineapple sometimes"

gewünschte Ausgabe: neues Frequenzranking, das alle Wörter im Diktat entsprechend ihrer Häufigkeit innerhalb von df $ wordsgov anzeigt

dict    freq_gov
"pear" : 3
"apple": 2
"pineapple: 1

Ich habe den folgenden Code ausprobiert, aber er hat mir die Anzahl der diktierten Wörter in jeder Zeile von df $ wordgov gegeben, was nicht das ist, was ich will:

dictongov <- within(
  df,
  counts <- sapply(
    gregexpr(paste0(dict, collapse = "|"), wordsgov),
    function(x) sum(x > 0)
  )
)

Ich kann nicht herausfinden, wie ich die Funktion so ändern kann, dass sie mir stattdessen die Häufigkeit für jedes Wort des Diktats auf dict $ wordsgov gibt. Ich habe versucht, str_detect, aber es funktioniert auch nicht. Jede Hilfe wäre wirklich dankbar !!!

- edit: ich habe folgendes benutzt, was gut funktioniert hat.

dictfreq <- df %>% mutate(dict = str_c(str_extract(wordsgov, str_c(dict, collapse = '|')), ':')) %>% 
                   count(dict, name = 'freq_gov') %>% arrange(desc(freq_gov))

Es wurden jedoch alle Wörter mit einer Häufigkeit von 0 entfernt. Gibt es eine Möglichkeit, die Wörter mit einer Häufigkeit von 0 beizubehalten? Ich habe ".drop = FALSE" versucht, aber es scheint nicht in diesem Code zu funktionieren. Jede Hilfe wäre sehr dankbar. Vielen Dank!

Antworten

akrun Nov 24 2020 at 21:50

Wir können das auch mit machen str_count

library(stringr)
library(purrr)
out <- map_int(str_c("\\b", v2, "\\b"), ~  sum(str_count(v1, .x)))
out
#[1] 2 1 3

rank(out)

Daten

v1 <- c("i hate apple", "i hate apple", "i love pear", "i don't like pear", 
       "pear is okay", "i eat pineapple sometimes")

v2 <- c("apple", "pineapple", "pear")