我一直在" qdap"中使用wfm
功能用于将文本行值转换为列的包,并在数据包含数字和文本时遇到问题。例如,如果行值为" abcdef"转置工作正常,但如果值为" ab1000"然后截断数字发生。任何人都可以帮助解决如何解决这个问题的建议吗?
到目前为止尝试的方法:
input <- read.table(header=F, text="101 ab0003
101 pp6500
102 sm2456")
colnames(input) <- c("id","channel")
require(qdap)
library(qdap)
output <- t(with(input, wfm(channel, id)))
output <- as.data.frame(output)
expected_output<- read.table(header=F,text="1 1 0
0 0 1")
colnames(expected_output) <- c("ab0003","pp6500", "sm2456")
答案 0 :(得分:1)
我认为wfm
可能不是这项工作的正确工具。你似乎没有真正想要分成单词的句子。因此,您不必要地使用具有大量开销的功能。您真正想要的是将另一个分组变量所具有的值制成表格。
这是两种方法。一个使用qdapTools
&#39; mtabulate
,另一个使用基础R&#39; table
:
library(qdapTools)
mtabulate(with(input, split(channel, id)))
## ab0003 pp6500 sm2456
## 101 1 1 0
## 102 0 0 1
t(with(input, table(channel, id)))
## channel
## id ab0003 pp6500 sm2456
## 101 1 1 0
## 102 0 0 1
您的MWE可能无法反映数据的复杂性,如果是这种情况则会将我们带回原始问题。 wfm
使用tm
包作为后端来进行一些操作。所以我们需要向ldots(...
)提供一些东西。我重新阅读了文档,这有点令人困惑(我在开发版中添加了这些信息)但我们想将removeNumbers=FALSE
传递给TermDocumentMatrix
,如下所示:
output <- t(with(input, wfm(channel, id, removeNumbers=FALSE)))
as.data.frame(output)
## ab0003 pp6500 sm2456
## 101 1 1 0
## 102 0 0 1