首页 > 解决方案 > R:计算列中每个唯一字符的频率

问题描述

我有一个数据框 df,其中包含一个名为strings. 此列中的值是一些句子。

例如:

id    strings
1     "I want to go to school, how about you?"
2     "I like you."
3     "I like you so much"
4     "I like you very much"
5     "I don't like you"

现在,我有一个停用词列表,

["I", "don't" "you"]

如何制作另一个数据框,将每个唯一词(停用词除外)的出现总数存储在前一个数据框的列中。

keyword      frequency
  want            1
  to              2
  go              1
  school          1
  how             1
  about           1
  like            4
  so              1
  very            1
  much            2

我的想法是:

  1. 将列中的字符串组合成一个大字符串。
  2. 制作一个存储大字符串中唯一字符的列表。
  3. 制作一列是唯一词的df。
  4. 计算频率。

但这似乎真的效率低下,我不知道如何真正编码。

标签: r

解决方案


一种方法是使用tidytext. 这里有一本书和代码

library("tidytext")
library("tidyverse")

#> df <- data.frame( id = 1:6, strings = c("I want to go to school", "how about you?",
#> "I like you.", "I like you so much", "I like you very much", "I don't like you"))

df %>% 
  mutate(strings = as.character(strings)) %>% 
  unnest_tokens(word, string) %>%   #this tokenize the strings and extract the words
  filter(!word %in% c("I", "i", "don't", "you")) %>% 
  count(word)

#> # A tibble: 11 x 2
#>    word       n
#>    <chr>  <int>
#>  1 about      1
#>  2 go         1
#>  3 how        1
#>  4 like       4
#>  5 much       2

编辑

所有标记都转换为小写,因此您要么包含i在 stop_words 中,要么将参数添加lower_case = FALSEunnest_tokens


推荐阅读