我知道 "splitstackshape" 中的 "cSplit_e" 可以将一个列中的多个值转换为带有二进制值的单独列。我正在处理一个文本问题,计算 tf-idf 并不需要在一列下拥有所有唯一的值。例如,
docname ftype doc_text
1 mw hello, hi, how, are, you, hello
2 gw hi,yo,man
3 mw woha,yo, yoman
DPUT(df)
structure(list(docname = 1:3, ftype = c("mw", "gw", "mw"), doc_text = structure(1:3, .Label = c("hello, hi, how, are, you, hello",
"hi,yo,man", "woha,yo, yoman"), class = "factor")), .Names = c("docname",
"ftype", "doc_text"), class = "data.frame", row.names = c(NA,
-3L))
对于上述示例,如果我们考虑doc-1,则cSplit_e将把doc_text转换为5个单独的列,当“hello”出现两次时,它们的值为“1”。有没有一种方法修改此函数以考虑重复值?
实质上,这是我想要实现的:给定一个数据框
docname ftype doc_text 1 mw hello,hi,how,are,you,hello 2 gw hi,yo,man 3 me woha,yo,yoman
我希望基于用","分隔的列值将doc_text转换为多个列并获取它们各自的频率。结果应该是:
docname ftype are hello hi how man woha yo yoman you
1 mw 1 2 1 1 0 0 0 0 1
2 gw 0 0 1 0 1 0 1 0 0
3 mw 0 0 0 0 0 1 1 1 0
如果有人知道如何使用 "splitstackshape" 或其他方法来完成此操作,我会非常感慕。最终目的是计算 tf-idf。
谢谢。
cSplit_e()
现在已经被修改为具有“计数”模式,可以按照您的期望进行操作。 - A5C1D2H2I1M1N2O1R2T1