R tm在数据帧内转换文本,保留其他列数据

时间:2016-05-20 14:52:33

标签: r dataframe tm

我想发布我的文字,出于多种原因,我建立了一个数据框,我在第二个例子中有一个列和频率的单词:

 words freq
 Have   123
 have    5
 having 4589

请注意,我们可以快速查看频率是否非常大,以这种方式执行此操作可能更有效地转换单词而不是具有重复多次的某些单词的语料库。

我想使用tm使用tolowerstemDocument等来转换单词

我知道我可以将words列从数据框中拉出到语料库中,但之后我将丢失频率信息。

我想得到:

 words freq
 have   123
 have    5
 have  4589

然后我想我可以使用setDT,dplyr包或聚合来获取:

words freq
have  4717

我计划在大型数据框架上执行此操作。感谢

我确实试图模仿tm: read in data frame, keep text id's, construct DTM and join to other dataset

1 个答案:

答案 0 :(得分:3)

此处不需要文本分析包,您可以使用 SnowballC 包中的tolower()wordStem()来执行此操作。 data.table的使用也使得它非常快。

require(data.table)
dt <- data.table(words = c("Have", "have", "having"),
                 freq = c(123, 5, 4589))

# transform to lowercase
dt[, words := tolower(words)]

# stem the words
dt[, words := SnowballC::wordStem(words)]

dt
##    words freq
## 1:  have  123
## 2:  have    5
## 3:  have 4589

# aggregate on same lowercased stems
dt[, list(freq = sum(freq)), by = words]
##    words freq
## 1:  have 4717

我的data.table版本:

packageVersion("data.table")
## [1] ‘1.9.6’