【问题标题】:data.table: Bypass setkey when using monotonic transform of a key variabledata.table:使用键变量的单调变换时绕过 setkey
【发布时间】:2014-03-24 22:19:20
【问题描述】:

'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'

我不知道是否有其他一些基础数据结构引用到表中可能会导致这种技术出现问题。

【问题讨论】:

  • 数据排序检查肯定还是O(n)吧?

标签: r data.table


【解决方案1】:

是的,当我确定数据已排序时,我一直使用该技巧,但使用 setattr 代替以避免复制:

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

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

【讨论】:

    猜你喜欢
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多