使用qdap将行转换为R中的列

时间:2014-09-22 15:55:01

标签: r transpose qdap

我一直在" 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")

1 个答案:

答案 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