当前位置:  开发笔记 > 程序员 > 正文

如何使用目标向量对data.table进行排序

如何解决《如何使用目标向量对data.table进行排序》经验,为你挑选了1个好方法。

所以,我有以下data.table

DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,2,3))

> DT
   x y
1: b 1
2: b 2
3: b 3
4: a 1
5: a 2
6: a 3
7: c 1
8: c 2
9: c 3

我有以下矢量

k <- c("2","3","1")

我想k用作目标向量来排序DT使用y并得到这样的东西.

> DT
   x y
1: b 2
2: a 2
3: c 2
4: b 3
5: a 3
6: c 3
7: b 1
8: a 1
9: c 1

有任何想法吗?如果我使用DT[order(k)]我获得原始数据的子集,这不是我想要的.



1> Rich Scriven..:

match()在那里打个电话.

DT[order(match(y, as.numeric(k)))]
#    x y
# 1: b 2
# 2: a 2
# 3: c 2
# 4: b 3
# 5: a 3
# 6: c 3
# 7: b 1
# 8: a 1
# 9: c 1

实际上DT[order(match(y, k))]也可以工作,但为了match()以防万一,为同一个类创建参数可能是最安全的.

注意: match()在某些情况下,已知是次优的.如果您有大量行,则可能需要切换到fastmatch::fmatch更快的匹配.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有