类似于转置的 melt 调用

A melt call that resembles a transpose

我想知道我的两步解决方案是否可以减少到一个 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)]

可以用 recast 完成(melt/dcast 的包装)

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

使用 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