data.table`setkey()`的反向顺序

时间:2016-10-10 18:35:55

标签: r data.table reverse

使用相反的记录顺序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

1 个答案:

答案 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)