2
閱讀?IDate
這似乎是一個好主意,我的字符變量轉換爲整數日期在我的大數據表中。誰不希望快速排序和分組?Difftime緩慢與data.table ID在R
IDate
明確提到功能仍然是實驗性的,所以我的問題是反饋比投訴更多。
爲什麼計算整數日期(IDate)類變量的時間差需要比其他日期類變量或整數長得多?
# Example data
require(data.table)
n <- 1e7
dt <- data.table(x1 = sample(1000:2000, n, replace=TRUE),
x2 = sample(1000:2000, n, replace=TRUE))
# Add date variables.
dt[, date1 := as.Date(x1, origin="1990-01-01")]
dt[, date2 := as.Date(x2, origin="1990-01-01")]
# Add integer-dates.
dt[, idate1 := as.IDate(date1)]
dt[, idate2 := as.IDate(date2)]
# Add POSIXct dates.
dt[, posix1 := as.POSIXct(date1)]
dt[, posix2 := as.POSIXct(date2)][]
# Check variable classes.
sapply(dt[, list(x1, date1, idate1, posix1)], class)
給人
$x1
[1] "integer"
$date1
[1] "Date"
$idate1
[1] "IDate" "Date"
$posix1
[1] "POSIXct" "POSIXt"
都很好。
現在我們來看看計算每個類的差異需要多長時間。
# Compute date diffs.
system.time(dt[, x.diff := x1 - x2])
user system elapsed
0.07 0.00 0.06
system.time(dt[, date.diff := date1 - date2])
user system elapsed
0.39 0.13 0.51
system.time(dt[, idate.diff := idate1 - idate2])
user system elapsed
6.21 0.67 6.91
system.time(dt[, posix.diff := posix1 - posix2]) # diff in seconds
user system elapsed
0.20 0.09 0.30
IDate類至少比其餘的十級的順序,令人驚訝,因爲它應該存儲爲一個整數?
# Check results are identical.
identical(dt[, date1], dt[, idate1])
[1] TRUE
日期和IDate結果是相同的。這是怎麼回事?
這是一個很好的觀察。現在我堅持'POSIXct'。你認爲這是'IDate'中的錯誤嗎? –
稍後我會檢查[data.table問題列表](https://github.com/Rdatatable/data.table/issues),看看有沒有關於它的任何信息。 – LauriK