设DT是一个示例数据表,DT 2是通过对DT中的每一列进行独立排序而构造的。
作为示例,表DT:
| ID|信|
| --|--|
| 1 |B|
| 4 |一|
| 3 |C|
| 2 |D|
| 5 |E|
成为表DT 2:
| ID|信|
| --|--|
| 1 |一|
| 2 |B|
| 3 |C|
| 4 |D|
| 5 |E|
在reordering_dt中,我保存了从DT到DT 2的转换所使用的排序。
# The original data table
DT <- data.table(
ID = c(1, 4, 3, 2, 5),
Letter = c("B", "A", "C", "D", "E")
)
# The "sorted" data table
DT2 <- DT[, lapply(.SD, function(col) col[order(col)])]
# storing what orderings we used to get DT2 from DT
reordering_dt <- as.data.table(lapply(DT, order))
字符串
只使用reordering_dt和DT 2,我如何再次获得DT?
如果我能做这样的事情,我应该能够进行转换:
recovered_DT <- DT2[, lapply(.SD, function(col) col[order(X)])]
型
其中X是reordering_dt中的对应列。
但是我不知道如何正确地指定X。
2条答案
按热度按时间ig9co6j11#
当然,我们可以用这个来反转它:
字符串
如果您正在处理非常大的数据集,我建议只执行一次
order(.)
,型
gzjq41n42#
例如,我认为应该使用
order(order(x))
来恢复初始值,字符串
但是你应该知道
xsorted[order(order(x))]
需要x
的order
信息,这是我在评论中说的“边信息”。换句话说,* 您永远无法从
xsorted
恢复xhat
(因为您也需要x
)。