在dcast之后,在var.values中重新排序具有多个变量的列

时间:2018-02-22 15:25:06

标签: r dcast

我使用dcast将data.table放入宽格式。因为我现在有很多列(因为我在var.values参数中指定了多个变量,所以我想重新排序列。这是我输入的数据的一个例子:

dt<-data.table(a_1=c(1,2,3), a_2=c(1,2,3), a_3=c(1,2,3), freq_1=c(1,2,3),freq_2=c(1,2,3), freq_3=c(1,2,3))

    a_1 a_2 a_3 freq_1 freq_2 freq_3
1:   1   1   1      1      1      1
2:   2   2   2      2      2      2
3:   3   3   3      3      3      3

这应该是这样的:

dt1<-data.table(a_1=c(1,2,3), freq_1=c(1,2,3), a_2=c(1,2,3), freq_2=c(1,2,3), a_3=c(1,2,3), freq_3=c(1,2,3))

   a_1 freq_1 a_2 freq_2 a_3 freq_3
1:   1      1   1      1   1      1
2:   2      2   2      2   2      2
3:   3      3   3      3   3      3

第一个提示类似于:

library("gtools")
cdat <- colsplit(names(dt),"\\_",c("name","num"))
dt<-dt[,order(mixedorder(cdat$name),cdat$num)]

但不幸的是,这不起作用

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:2)

您可以使用setcolorder

library(data.table)
setcolorder(dt, order(sub('.*_', '', names(dt))))

给出,

   a_1 freq_1 a_2 freq_2 a_3 freq_3
1:   1      1   1      1   1      1
2:   2      2   2      2   2      2
3:   3      3   3      3   3      3