提问人:Mohit 提问时间:11/17/2023 最后编辑:JulianMohit 更新时间:11/17/2023 访问量:49
R,使用给定的用户输入对 data.table 进行排序
R, sorting a data.table with a given user input
问:
这是我的数据。
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")
- 但是代码需要是动态的,并且在询问时会考虑更多列。
- 用户请求的列不需要排序,但也可以这样。
c("V5", "V1")
我一直使用,但欢迎其他任何有效的东西。gtools::mixedsort()
如果您觉得这篇文章有用,可以参考这篇文章。在 R 中对非常大的数据集进行排序
谢谢。
答:
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.table
order
setorderv(dt, fromexcel)
order
?setorder
2赞
r2evans
11/20/2023
不过,我确实建议,include 也应该作为 -canonical 代码包含在内。它产生了与相同的速度和效率,但只需一点代码高尔夫,也许还有更清晰的编码“意图”。setorderv(dt, fromexcel)
data.table
order(.)
0赞
Mohit
11/21/2023
谢谢埃文斯!希望你做得很好。
评论
setorderv
setorderv(dt, fromexcel)