2

我有一个 4 列的数据框。第 1 列由 ID 组成,第 2 列由文本组成(每个约 100 个单词),第 3 列和第 4 列由标签组成。

现在我想从文本列中检索词频(最常见的词),并将这些频率作为额外的列添加到数据框中。我希望列名是单词本身,并且在文本中用它们的频率(范围从 0 到每个文本)填充的列。

我尝试了 tm 包的一些功能,但直到现在还不能令人满意。有谁知道如何处理这个问题或从哪里开始?有没有可以完成这项工作的软件包?

id  texts   label1    label2
4

1 回答 1

7

那么让我们解决这些问题......

我猜你有一个看起来像这样的data.frame:

       person sex adult                                 state code
1         sam   m     0         Computer is fun. Not too fun.   K1
2        greg   m     0               No it's not, it's dumb.   K2
3     teacher   m     1                    What should we do?   K3
4         sam   m     0                  You liar, it stinks!   K4
5        greg   m     0               I am telling the truth!   K5
6       sally   f     0                How can we be certain?   K6
7        greg   m     0                      There is no way.   K7
8         sam   m     0                       I distrust you.   K8
9       sally   f     0           What are you talking about?   K9
10 researcher   f     1         Shall we move on?  Good then.  K10
11       greg   m     0 I'm hungry.  Let's eat.  You already?  K11

该数据集来自 qdap 包。让 qdap 使用install.packages("qdap")

DATA现在,为了使我在您的数据集上讨论的可重现示例,使用来自 qdap的数据集执行我在此处所做的事情。

DATA
dput(head(DATA))

现在好了,对于你原来的问题,我认为wfm会做你想做的事:

freqs <- t(wfm(DATA$state, 1:nrow(DATA)))
data.frame(DATA, freqs, check.names = FALSE)

如果您只想要顶部这么多的单词,请使用我在这里使用的排序技术:

freqs <- t(wfm(DATA$state, 1:nrow(DATA)))
ords <- rev(sort(colSums(freqs)))[1:9]      #top 9 words
top9 <- freqs[, names(ords)]                #grab those columns from freqs  
data.frame(DATA, top9, check.names = FALSE) #put it together

结果如下所示:

> data.frame(DATA, top9, check.names = FALSE)
       person sex adult                                 state code you we what not no it's is i fun
1         sam   m     0         Computer is fun. Not too fun.   K1   0  0    0   1  0    0  1 0   2
2        greg   m     0               No it's not, it's dumb.   K2   0  0    0   1  1    2  0 0   0
3     teacher   m     1                    What should we do?   K3   0  1    1   0  0    0  0 0   0
4         sam   m     0                  You liar, it stinks!   K4   1  0    0   0  0    0  0 0   0
5        greg   m     0               I am telling the truth!   K5   0  0    0   0  0    0  0 1   0
6       sally   f     0                How can we be certain?   K6   0  1    0   0  0    0  0 0   0
7        greg   m     0                      There is no way.   K7   0  0    0   0  1    0  1 0   0
8         sam   m     0                       I distrust you.   K8   1  0    0   0  0    0  0 1   0
9       sally   f     0           What are you talking about?   K9   1  0    1   0  0    0  0 0   0
10 researcher   f     1         Shall we move on?  Good then.  K10   0  1    0   0  0    0  0 0   0
11       greg   m     0 I'm hungry.  Let's eat.  You already?  K11   1  0    0   0  0    0  0 0   0
于 2013-03-07T00:42:12.293 回答