Предположим, что у меня есть таблица данных 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. Не уверен, что это возможно или естественно реализовать.