繁体   English   中英

使用多列名称的字符向量以编程方式对 data.table 进行排序

[英]Sort a data.table programmatically using character vector of multiple column names

我需要在作为变量名称的字符向量提供的多列上对data.table进行排序。

到目前为止,这是我的方法:

DT = data.table(x = rep(c("b","a","c"), each = 3), y = c(1,3,6), v = 1:9)

#column names to sort by, stored in a vector
keycol <- c("x", "y")

DT[order(keycol)]
   x y v
1: b 1 1
2: b 3 2

不知何故,它只显示 2 行并删除其他记录。 但如果我这样做:

DT[order(x, y)]
   x y v
1: a 1 4
2: a 3 5
3: a 6 6
4: b 1 1
5: b 3 2
6: b 6 3
7: c 1 7
8: c 3 8
9: c 6 9

它像流体一样工作。 任何人都可以帮助使用列名向量进行排序吗?

你需要?setorderv和它的cols参数:

x的列名的字符向量,用于排序

library(data.table)
DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9)
#column vector
keycol <-c("x","y")
setorderv(DT, keycol)
DT
   x y v
1: a 1 4
2: a 3 5
3: a 6 6
4: b 1 1
5: b 3 2
6: b 6 3
7: c 1 7
8: c 3 8
9: c 6 9

请注意,无需将setorderv的输出分配回DT 该函数通过引用更新DT

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM