重新排序r

时间:2016-02-11 05:56:04

标签: r dataframe data.table

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

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

我们可以创建一个感兴趣的列矢量('nm1'),然后将其与'nm1'中的列名称连接起来(使用setdiff。在data.table中,用于子列化列,我们使用with = FALSE

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

其他选项包括setcolorder,但上述方法更方便,因为它不会替换原始数据集中的顺序。

注意:没有使用外部包。

答案 1 :(得分:0)

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

与来自moveMemy "SOfun" package配对,您可以非常灵活地重新排序列。

加载包并创建样本数据:

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