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

R 如何使用目标向量对data.table进行排序,r,data.table,R,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") 有什么想法吗?如果我使用DT[order(k)]我会得到原始数据的一个子集,而这不是我想要的。在那里抛出对match()的调用 DT[ord

因此,我有以下数据

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")

有什么想法吗?如果我使用
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
,以加快匹配速度。

您可以执行以下操作:

DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,2,3))
k <- c("2","3","1")
setkey(DT,y)
DT[data.table(as.numeric(k))]
DT=data.table(x=rep(c(“b”,“a”,“c”),每个=3),y=c(1,2,3))

k现在,您只需在
y
上执行
DT[data.table(y=as.numeric(k)),on=“y”]
即可在
y
上进行合并,而无需设置键
DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,2,3))
k <- c("2","3","1")
setkey(DT,y)
DT[data.table(as.numeric(k))]
DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,2,3))
k <- c("2","3","1")
DT[data.table(y = as.numeric(k)), on = "y"]