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

时间:2014-03-24 22:19:21

标签: 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'

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

1 个答案:

答案 0 :(得分:4)

是的,当我确定数据已排序时,我会一直使用该技巧,但请使用setattr来避免副本:

setattr(DT, 'sorted', 'month')

如果您查看setkeyv的代码,您会看到它的确切行为 - 对数据进行排序,然后设置&#34;排序&#34;属性。