R,使用给定的用户输入对 data.table 进行排序

R, sorting a data.table with a given user input

提问人:Mohit 提问时间:11/17/2023 最后编辑:JulianMohit 更新时间:11/17/2023 访问量:49

问:

这是我的数据。

dt<-as.data.table(matrix(data = sample(c(paste0(sample(letters, 9), 1:120), round(runif(5) * 100)), 120, replace = TRUE),nrow = 20,ncol = 6,byrow = FALSE))

所有或部分列要么是数字,要么是字母,要么是两者的混合。 我需要根据哪些列的输入对数据进行排序,即是只有 1 列还是 2 列在一起或更多列。

假设这是当前用户输入的内容

fromexcel<-c("V1", "V2", "V3")
  1. 但是代码需要是动态的,并且在询问时会考虑更多列。
  2. 用户请求的列不需要排序,但也可以这样。c("V5", "V1")

我一直使用,但欢迎其他任何有效的东西。gtools::mixedsort()

如果您觉得这篇文章有用,可以参考这篇文章。在 R 中对非常大的数据集进行排序

谢谢。

r 数据表

评论

2赞 jblood94 11/18/2023
你在找吗?setordervsetorderv(dt, fromexcel)

答:

3赞 s_baldur 11/17/2023 #1

一种选择:

dt[do.call(order, mget(fromexcel))]

但正如 r2evans 在评论中解释的那样,规范的方式是(这会对表格进行适当的排序):data.table

setorderv(dt, fromexcel)

评论

1赞 r2evans 11/20/2023
郑重声明:将优化本例中的使用,因此它在内部使用与 相同的机制。(不应将其与使用基 R 混淆,因为 from :“请注意,像 'x[order(.)]' 这样的查询在内部进行了优化,以使用 'data.table' 的快速顺序”。data.tableordersetorderv(dt, fromexcel)order?setorder
2赞 r2evans 11/20/2023
不过,我确实建议,include 也应该作为 -canonical 代码包含在内。它产生了与相同的速度和效率,但只需一点代码高尔夫,也许还有更清晰的编码“意图”。setorderv(dt, fromexcel)data.tableorder(.)
0赞 Mohit 11/21/2023
谢谢埃文斯!希望你做得很好。