在r中对data.table的选定列重新排序

在r中对data.table的选定列重新排序,r,dataframe,data.table,R,Dataframe,Data.table,我有一个数据表dt[],它包含500列,我需要从数据表中选择6列,比如(a,c,k,m,n,o),并将它们放在数据表的开头 有没有办法做到这一点 我们可以创建感兴趣的列向量(“nm1”),然后将其与“nm1”中的列名连接起来(使用setdiff。在data.table中,对于子集列,我们使用with=FALSE nm1 <- c('a', 'c' 'k', 'm', 'n', 'o') dt[, c(nm1, setdiff(names(dt1), nm1)), with=FALSE]

我有一个数据表dt[],它包含500列,我需要从数据表中选择6列,比如(a,c,k,m,n,o),并将它们放在数据表的开头


有没有办法做到这一点

我们可以创建感兴趣的列向量(“nm1”),然后将其与“nm1”中的列名连接起来(使用
setdiff
。在
data.table
中,对于子集列,我们使用
with=FALSE

nm1 <- c('a', 'c' 'k', 'm', 'n', 'o')
dt[, c(nm1, setdiff(names(dt1), nm1)), with=FALSE]

nm1无论是处理
data.frame
s还是
data.table
s,我建议加载“data.table”并使用
setcolorder

与from结合使用,可以非常灵活地对列进行重新排序

加载包并创建示例数据:

library(SOfun)
library(data.table)
DT <- as.data.table(as.list(setNames(1:26, letters)))
DF <- setDF(copy(DT))
DT
#    a b c d e f g h i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z
# 1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

DF
#   a b c d e f g h i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z
# 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
除了“第一”,还有“最后”、“之前”和“之后”

setcolorder(DT, moveMe(names(DT), "a,c,k,m,n,o first"))
DT
#    a c  k  m  n  o b d e f g h i  j  l  p  q  r  s  t  u  v  w  x  y  z
# 1: 1 3 11 13 14 15 2 4 5 6 7 8 9 10 12 16 17 18 19 20 21 22 23 24 25 26

setcolorder(DF, moveMe(names(DF), "a,c,k,m,n,o first"))
DF
#   a c  k  m  n  o b d e f g h i  j  l  p  q  r  s  t  u  v  w  x  y  z
# 1 1 3 11 13 14 15 2 4 5 6 7 8 9 10 12 16 17 18 19 20 21 22 23 24 25 26
setcolorder(DF, moveMe(names(DF), "a,c,k,m,n,o first; l,e,q,r,w last"))
DF
#   a c  k  m  n  o b d f g h i  j  p  s  t  u  v  x  y  z  l e  q  r  w
# 1 1 3 11 13 14 15 2 4 6 7 8 9 10 16 19 20 21 22 24 25 26 12 5 17 18 23