【问题标题】:Reordering columns with multiple variables in var.values after dcast在 dcast 之后重新排序 var.values 中具有多个变量的列
【发布时间】:2018-02-22 15:25:06
【问题描述】:

我使用 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)]

但不幸的是,这不起作用

非常感谢您的帮助!

【问题讨论】:

    标签: r dcast


    【解决方案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
    

    【讨论】:

    • 非常感谢!由于我有 1-146 的数字,它仍然一团糟:我有 a_1、freq_1、a_10、freq_10 ……等等。你有什么解决办法吗?谢谢!!!
    • 它也应该可以正常工作。如果您有多达freq_3freq_100,这有什么关系?
    • 确实如此,我想我需要将 a_1 重命名为 a_001。是否可以自动完成,谢谢!
    • 没关系。请分享一个给出这个问题的例子。否则我无能为力了
    猜你喜欢
    • 2020-05-11
    • 2018-02-21
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多