所以,我有以下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)]
我获得原始数据的子集,这不是我想要的.
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
更快的匹配.