r - 使用关键字频率对共现进行加权
问题描述
我在 R 中有两个数据框。第一个列出了一定数量的关键字及其频率(在文本中检测到的次数)。第二个数据框显示了关键词的共现(例如,当两个关键词出现在同一章节中时)。我想为我的数据创建一个附加列,然后将其用作权重。第三列(“w”)将基于 w_(x1,x2) = co-occurrences /(x1 被列为关键字的次数 + x2 被列为关键字的次数)。知道我应该怎么做吗?
Key words Frequency
art 5
risk 3
trade 1
X1 X2 w_(x1,x2)
art risk 0.125
art trade 0.1666667
得到了这个代码但不起作用,我仍然是一个业余爱好者。也许有更简单的事情?
e <- df[,"keywords"]$`keywords`%>%
str_split("\r\r\n") %>%
lapply(function(x){expand.grid(x, x, w = (1 / length(x) + length(x)), stringsAsFactors = FALSE)}) %>%
bind_rows
e <- apply(e[, -3], 1, str_sort) %>%
t %>%
data.frame(stringsAsFactors = FALSE) %>%
mutate(w = e$w)
解决方案
您的计算可以使用流行的tidyverse
包来执行。根据您的评论,问题很简单。
word_freq <- read.table(header = TRUE, stringsAsFactors = FALSE,
text = "Key_words Frequency
art 5
risk 3
trade 1")
co_occur <- read.table(header = TRUE, stringsAsFactors = FALSE,
text ="X1 X2 w
art risk 0.1250000
art trade 0.1666667")
library(tidyverse)
#
# Get the frequencies for each of X1 and X2, sum, and then compute the new weight
#
chapt_occur <- co_occur %>% left_join(word_freq, by = c(X1 = "Key_words")) %>%
left_join(word_freq, c(X2 = "Key_words"), suffix = c(".X1", ".X2")) %>%
mutate(comb_freq = Frequency.X1+Frequency.X2,
w_X1X2 = w/comb_freq)
这给出了结果
chapt_occur
X1 X2 w Frequency.X1 Frequency.X2 comb_freq w_X1X2
art risk 0.1250000 5 3 8 0.01562500
art trade 0.1666667 5 1 6 0.02777778
可以使用删除包含中间计算的列
chapt_occur <- chapt_occur %>% select( -c(Frequency.X1, Frequency.X2, comb_freq))
这仅使用基本的 tidyverse 函数。您可以在许多地方了解更多信息,tidyverse
包括几位开发人员R for Data Science的在线书籍
推荐阅读
- excel - 如果一行包含某些文本,如何将其复制到另一个工作表中的下一个可用行
- html - 直接在电子邮件中下载
- validation - RequestBody 和 Validation Annotation 为空
- sql - 来自oracle sql的等效redshift sql
- python - 如何修复“发生异常:AttributeError”
- javascript - 外部 JS 文件未加载
- android - Android 使用带有 ArrayAdapter 的自定义对象,并传递返回视图
- r - 在R中重构字符串
- arrays - 无法使用 uint8 类型初始化数组
- apache-kafka - cli 模式下的 Quarkus Kafka