How to reorder data.table columns (without copying)

前端 未结 2 379
迷失自我
迷失自我 2020-11-29 17:59

I\'d like to reorder columns in my data.table x, given a character vector of column names, neworder:

library(data.tabl         


        
相关标签:
2条回答
  • 2020-11-29 18:25

    One may find it easier to use the above solution, but instead sort by column number. For example: library(data.table)

        > x <- data.table(a = 1:3, b = 3:1, c = runif(3))
        > x
             a b         c
        [1,] 1 3 0.2880365
        [2,] 2 2 0.7785115
        [3,] 3 1 0.3297416
        > setcolorder(x, c(3,2,1))
        > x
             c         b a
        [1,] 0.2880365 3 1
        [2,] 0.7785115 2 2
        [3,] 0.3297416 1 3
    
    0 讨论(0)
  • 2020-11-29 18:34

    Use setcolorder():

    library(data.table)
    x <- data.table(a = 1:3, b = 3:1, c = runif(3))
    x
    #      a b         c
    # [1,] 1 3 0.2880365
    # [2,] 2 2 0.7785115
    # [3,] 3 1 0.3297416
    setcolorder(x, c("c", "b", "a"))
    x
    #              c b a
    # [1,] 0.2880365 3 1
    # [2,] 0.7785115 2 2
    # [3,] 0.3297416 1 3
    

    From ?setcolorder:

    In data.table parlance, all set* functions change their input by reference. That is, no copy is made at all, other than temporary working memory, which is as large as one column.

    so should be pretty efficient. See ?setcolorder for details.

    0 讨论(0)
提交回复
热议问题