【问题标题】:A melt call that resembles a transpose类似于转置的融化呼叫
【发布时间】:2019-09-12 11:58:48
【问题描述】:

我想知道我的两步解决方案是否可以简化为一个melt() 调用,或者更简单地使用data.table

我的数据:

DT <- data.table(category = c("x", "y"), `2010` = c(10, 20), `2011` = c(40, 43))
DT # Has much more columns in reality
   category 2010 2011
1:        x   10   40
2:        y   20   43

预期输出:

   year  x  y
1: 2010 10 20
2: 2011 40 43

目前的解决方案:

library(data.table)

melt(DT, id.vars = "category", variable.name = "year")[, dcast(.SD, year ~ category)]

【问题讨论】:

  • '几乎'解决方案:as.data.table( t(DT), keep.rownames = TRUE )[2:.N,]

标签: r data.table melt


【解决方案1】:

使用data.table 版本>= 1.12.4,对于这种特殊情况,您可以使用transpose,如下所示:

transpose(DT, keep.names="year", make.names="category")

输出:

   year  x  y
1: 2010 10 20
2: 2011 40 43

【讨论】:

    【解决方案2】:

    可以使用recastmelt/dcast 的包装器)来完成

    library(reshape2)
    recast(DT, variable ~ category, id.var = 'category')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      相关资源
      最近更新 更多