【问题标题】:Word Frequency to DataFrame from strings in R从R中的字符串到DataFrame的词频
【发布时间】:2018-03-30 21:38:18
【问题描述】:

我想取一些字符串向量,并将向量中找到的单词的频率作为数据框。数据框的列名应该是在所有组合字符串中找到的唯一单词。我有这部分,正是这些词被添加到数据框中的频率让我着迷。这是我正在尝试的一个非常缩小的版本。我曾尝试使用 table(),但我不确定我的方向是否正确。

a <- c('A', 'B', 'C', 'D', 'E')
b <- c('A', 'D', 'J', 'G', 'X')
c <- c('A', 'A', 'B', 'B', 'C', 'X')

示例 Data.Frame 设计

vector.name  A  B  C  D  E  J  G  X 
a            1  1  1  1  1  0  0  0
b            1  0  0  1  0  1  1  1
c            2  2  1  0  0  0  0  1

【问题讨论】:

  • 要计算字符串的出现次数,请尝试sum(grepl("A", c))
  • 我用过 grepl,但这对于向量中的每个值来说似乎都非常乏味。我该如何扩展它?
  • 似乎我可以使用应用函数树中的一些东西来遍历向量并计算所有单词的频率。但是,如何以正确的格式将结果添加到数据框中?

标签: r dataframe


【解决方案1】:

一旦你有一个长数据集,这实际上是一个table 操作:

table(stack(mget(c("a","b","c")))[2:1])

#   values
#ind A B C D E G J X
#  a 1 1 1 1 1 0 0 0
#  b 1 0 0 1 0 1 1 1
#  c 2 2 1 0 0 0 0 1

【讨论】:

  • @markdly - 如果 data.frame 是绝对必要的,我会这样做:id &lt;- c("a","b","c"); cbind(id, as.data.frame.matrix(t(table(stack(mget(id))))))
【解决方案2】:

这应该可以工作

countUniqueEntries <- function(l) {
    lapply(l, function(x) {
        x <- factor(x, levels = unique(unlist(l)));
        table(x) })
}

do.call(rbind, countUniqueEntries(list(a, b, c)));
     A B C D E J G X
[1,] 1 1 1 1 1 0 0 0
[2,] 1 0 0 1 0 1 1 1
[3,] 2 2 1 0 0 0 0 1

【讨论】:

  • 这表现得很完美。
猜你喜欢
  • 2018-08-28
  • 2011-07-10
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
  • 2020-03-19
  • 2018-10-11
相关资源
最近更新 更多