使用相反的记录顺序setkey
data.table的最佳方式是什么?到目前为止,我使用了setkey()
和setorder()
:
setkeyrev <- function(inputDT,...){
setkey(inputDT, ...)
setorderv(inputDT, key(inputDT), order = -1)
invisible(inputDT)
}
有更好的解决方案吗?
UPD。这是一个例子:
myDT <- fread('
colA colB
1 b1
3 b3
8 b8
5 b5')
setkey(myDT, colA)
myDT
setkeyrev(myDT, colA)
myDT
答案 0 :(得分:0)
我迟到了3年,但这可能会对其他人有所帮助。我一直在寻找解决这个确切问题的方法,但是正如注释中所指出的,OP中的示例未保留键。这些评论使我想到了一个简单的解决方案。创建一个新列,以提供所需的顺序(逆序),然后将其用作键...
myDT <- fread('
colA colB
1 b1
3 b3
8 b8
5 b5')
myDT[,revorder:=frankv(colA,order=-1,ties.method = "first")]
setkey(myDT,revorder)
如果您需要在组内进行反向排序(就像我一样)...
myDT <- fread('
colA grp
1 a
2 a
3 a
4 b
8 b
5 b')
myDT[,revorder:=frankv(colA,order=-1,ties.method = "first"),by = grp]
setkey(myDT,grp,revorder)