【问题标题】:transpose row to column in R using qdap使用 qdap 将 R 中的行转换为列
【发布时间】:2014-09-22 15:55:01
【问题描述】:

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

【问题讨论】:

    标签: r transpose qdap


    【解决方案1】:

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

    这里有两种方法。一个使用qdapToolsmtabulate,另一个使用base R的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 使用 tmpackage 作为后端来进行一些操作。所以我们需要为 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
    

    【讨论】:

    • 感谢 Tyler - 这解决了问题。由于我是 R 的相对较新的用户,这是我看到的用于转置值的示例之一。我也能够使用“reshape2”包中的 dcast 函数解决问题。
    猜你喜欢
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2021-10-22
    • 1970-01-01
    • 2016-03-30
    • 2011-07-12
    相关资源
    最近更新 更多