【问题标题】:R - how to: for every word in a certain list , count how often the word occurs in a column of eg 3000 wordsR - 如何:对于某个列表中的每个单词,计算该单词在例如 3000 个单词的列中出现的频率
【发布时间】:2018-07-26 00:28:40
【问题描述】:

我有一个数据集 x,其中包含大约 3000 行中的一堆文本 (columns: title, location, contents)

编辑:一个例子。

标题 |位置 |内容 ... 迪拜 .... ... 迪拜 .... ... 喀土穆 .... ... 喀土穆苏丹 .... ... 雅加达 ....

link to image example

我有一个位置列表。 locations <- c("DUBAI", "KHARTOUM", "JAKARTA", "Paris")

现在我想创建一个从迪拜开始的循环,看看它出现在多少列中,然后创建一个带有计数的变量。然后我想移动到位置列表(Khartoum) 中的下一个单词并做同样的事情。

所以在这种情况下,我希望看到:迪拜 = 2,喀土穆 = 2,雅加达 = 1。

到目前为止我有这个,但我不知道如何概括它并使其成为一个循环:

numberDUBAI <- nrow(dplyr::filter(x, grepl(' DUBAI ', location))) 

然后我对每个单词重复一遍

numberLOCATIONS <- c(numberDUBAI, numberKHARTOUM, numberJAKARTA, numberPARIS)

但这感觉效率很低,帮助? :D

【问题讨论】:

  • 使用 table() 函数。它为您提供每个单词的频率。

标签: r string loops counting grepl


【解决方案1】:

我们可以通过tidyverse 使用map 来做到这一点

library(tidyverse)
map(locations, ~
               x %>%
                  summarise(n = sum(str_detect(location, .x, ignore_case = TRUE)))
      )

注意:假设“x”是数据集,“位置”是列,并且来自 OP 的帖子“位置”是 vector 的模式

【讨论】:

  • 也许你可以使用toupper(或tolower),数据看起来很乱。
  • @RuiBarradas 我认为我们可以使用str_detect 中的ignore_case` 作为修饰符
  • 在这里,谢谢!:数据集被调用:x列是:标题,位置,内容我希望它一一查看的单词列表是:位置,但我不太清楚了解您对代码所做的工作以及计算第一个位置在数据集中出现的频率的新变量在哪里。
  • @JGreen 在代码中,循环遍历pattern的'locations'向量,使用str_detect返回一个逻辑向量。取 TRUE 值的sum 以获取计数。这将返回一个list 的数据集
  • @JGreen BTW,你还没有提供任何可复制的小例子让别人更好地帮助你
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多