data.table:如何快速堆栈(DT)操作,并返回data.table而不是返回data.frame

时间:2014-10-22 23:06:05

标签: r data.table

DT <- data.table(a = c(1, 3), b = c(5, 2))

DT1 <- stack(DT)

> stack(DT1)
 values ind
1      1   a
2      3   a
3      5   b
4      2   b

现在,它已更改为data.frame。当然,我可以使用setDT(DT1)将其更改回data.table,

> DT1
   values ind
1:      1   a
2:      3   a
3:      5   b
4:      2   b

我现在想,在data.table中还有其他方法可以执行**stack**操作(或类似stack function更高效的操作)并直接返回data.table而不是data.frame吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用包gather

中的tidyr
library(tidyr)
DT <- data.table(a = c(1, 3), b = c(5, 2))
DT1 <- gather(DT, ind, values, a:b)

第二个参数是新“key”变量的名称,第三个参数是新“value”变量的名称,最后一个参数是要收集的列(在本例中为全部)。此外,gather会自动为data.tables调用melt的更快版本。