data.table:在使用键变量的单调变换时绕过setkey

Jam*_*mes 8 r data.table

'sorted'属性是官方data.table API的一部分吗?

我经常做一些事情,比如从日期变量中获取一周/月/季度/年变量,这当然是单调变换.然后,我通过使用这些单调派生变量之一来做事.

我想知道用星期/月/等的名称直接替换我的日期变量是否安全.排序属性中的变量并使事情正常工作?即以下是安全的:

library(data.table)
library(lubridate)
DT <- data.table(day=as.Date(c('2006-01-30', '2006-01-31', '2006-02-01', '2006-02-02')),
                 d=1:4, key='day')
DT[, month := floor_date(day, unit='month')]
# is this safe?
attr(DT, 'sorted') <- 'month'
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚是否有一些其他基础数据结构引用到表中可能会导致此技术出现问题.

edd*_*ddi 4

是的,当我确定数据已排序时,我总是使用这个技巧,但使用它setattr来避免复制:

setattr(DT, 'sorted', 'month')
Run Code Online (Sandbox Code Playgroud)

如果您查看代码,setkeyv您会发现这正是它的作用 - 对数据进行排序,然后设置“已排序”属性。