r - 计算列中字典单词的频率并生成新的“dictfreq”列
问题描述
似乎是一个简单的命令,但我似乎找不到在 R 中生成它的好方法。基本上,我只想计算字典 dict 中每个单词在另一个数据框的列 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"
期望的输出:新的频率排名,根据 df$wordsgov 中的频率显示 dict 中的所有单词
dict freq_gov
"pear" : 3
"apple": 2
"pineapple: 1
我尝试了以下代码,但它给了我在 df$wordgov 的每一行中出现 dict 单词的次数,这不是我想要的:
dictongov <- within(
df,
counts <- sapply(
gregexpr(paste0(dict, collapse = "|"), wordsgov),
function(x) sum(x > 0)
)
)
我似乎无法弄清楚如何更改函数,以便它为我提供 dict$wordsgov 上 dict 的每个单词的频率。我试过 str_detect 但它也不起作用。任何帮助都将不胜感激!!!
- 编辑:我使用了以下,效果很好。
dictfreq <- df %>% mutate(dict = str_c(str_extract(wordsgov, str_c(dict, collapse = '|')), ':')) %>%
count(dict, name = 'freq_gov') %>% arrange(desc(freq_gov))
但是,它取出了所有频率为0的单词。有没有办法保留频率为0的单词?我试过“.drop=FALSE”,但它似乎在这段代码中不起作用。任何帮助将非常感激。谢谢!
解决方案
我们也可以这样做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)
数据
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")
推荐阅读
- python - 来自自定义模块 ModuleNotFoundError 的 python:没有名为“活动”的模块
- python - Flask 在重定向之前运行代码并在 python 控制台中抛出错误,但在烧瓶调试中没有
- python - Zepplin:带有用户定义的 python 版本的 Spark
- android - 尝试学习 Appium 时 Android Studio 中的重复类
- python - 转到链接的 Python 脚本
- nlp - 两个词与预训练的 NLTK 词网的相似度
- python - 如何修复,selenium.webdriver.Chrome(),tracebook
- html - 未找到编码 URL 的百分比
- linux - 文件写入后如何确认块设备是否不再被写入?
- c++ - c++ 包含类实例的接口数组