2

我一直在使用wfm“qdap”包中的函数将文本行值转换为列,当数据包含数字和文本时遇到问题。例如,如果行值为“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")
4

1 回答 1

1

我认为也许wfm不是这项工作的正确工具。看来您并没有真正想要拆分成单词的句子。因此,您不必要地使用了具有大量开销的函数。您真正希望它通过另一个分组变量将您拥有的值制成表格。

这里有两种方法。一个使用qdapTools's mtabulate,另一个使用 base R's 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=FALSETermDocumentMatrix,如下所示:

output <- t(with(input, wfm(channel, id, removeNumbers=FALSE)))
as.data.frame(output)

##     ab0003 pp6500 sm2456
## 101      1      1      0
## 102      0      0      1
于 2014-09-23T12:05:06.007 回答