我有一个包含500列的数据表dt [],我需要从数据表中选择6列说(a,c,k,m,n,o)并将它们放在数据表的起始处。
有没有办法做到这一点?
答案 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
。
与来自moveMe
的my "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