Как вы отмените заказ setkey в data.table?

Предположим, что у меня есть таблица данных DT, и я меняю порядок с помощью установочного ключа

setkey(DT,mykey)

Тогда, возможно, я присоединяюсь к некоторым вещам из другой таблицы.

DT=DT2[DT]

Есть ли способ восстановить исходный порядок строк? Я знаю, я могу сделать это, явно указав индекс, прежде чем использовать setkey.

N=Nrow(DT)
DT[,orig_index:=1:N]
setkey(DT,mykey)
DT=DT2[DT]
setkey(DT,orig_index)
DT[,orig_index:=NULL]

Есть ли более простой способ? Если бы я делал это с порядком вместо заданного ключа, это было бы немного проще.

o=order(DT$mykey)
uo=order(o)
setkey(DT,mykey)
DT=DT2[DT]
DT=DT[uo,]

Было бы неплохо, я думаю, если бы setkey можно было отменить с чем-то вроде этого

setkey(DT,mykey,save.unset=T)
DT=DT2[DT]
unsetkey(DT)

Здесь save.unset = T сообщит data.table, чтобы сохранить последнее переупорядочение, чтобы оно могло быть отменено.

Еще лучше, может быть

setkey(DT, reorder=F)
DT=DT2[DT]

Эта опция сообщила бы, что data.table использует порядок клавиш для соединений или что-то другое, не изменяя при этом порядок DT. Не уверен, что это возможно или естественно реализовать.

Ответ 1

Согласен. Это то, что мы называем вторичным ключом, и план состоит в том, чтобы добавить set2key, чтобы сделать именно это. Теперь можно выполнять ручные вторичные ключи. Но это очень похоже на то, что у вас есть в вопросе. Это очень много.

FR # 1007 Создайте дополнительные ключи

и некоторые примеры:

fooobar.com/info/443810/...
fooobar.com/info/443812/...