Изменение порядка столбцов с несколькими переменными в var.values ​​после 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 ответ

Ты можешь использовать 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
Другие вопросы по тегам