【发布时间】:2016-10-19 02:49:30
【问题描述】:
我有一个data.tabledumdt:
set.seed(123)
dumdt <- data.table(v1=sample(1:10, 5), v2=1:5)
我想按照这个特定的索引顺序重新排序哪些行(首先是第三个观察,然后是第五个,然后是第二个,等等):
to_ord <- c(3, 5, 2, 1, 4)
所以我希望dumdt 成为dumdt[to_ord] 的结果,但我也希望通过引用来实现,避免使用dumdt <- dumdt[to_ord]。
我知道我可以通过引用setorder(或setorderv)对行重新排序,但只能根据一个或多个变量,按升序或降序排列,而不是按自定义顺序。
但是,如果我想按自定义顺序重新排序列而不是行,我可以使用setcolorder。
所以我的问题来了:是否有一个函数可以像 setcolorder 一样工作但与行(或使用 setorder 来做同样的事情)?
我想要的输出是这样的
setroworder(x=dumdt, neworder=to_ord)
dumdt
# v1 v2
# 1: 4 3
# 2: 6 5
# 3: 8 2
# 4: 3 1
# 5: 7 4
【问题讨论】:
-
setorder(cbind(dumdt,to_ord),to_ord)(然后将 to_ord 设置为 NULL)不够快吗? -
@EricLecoutre 谢谢你的评论,我不确定
cbind的使用是否有效,但无论如何,这会改变cbind的未分配输出而不是初始对象,这样不会真的有帮助。 (实际上我非常确信输出不会是预期的......) -
是的...确实。参考文献总是有些困难...
标签: r sorting data.table