Gần đây tôi đã phát hiện ra gói data.table và bây giờ tự hỏi có nên thay thế một số mã plyr của tôi hay không. Tóm lại, tôi thực sự thích plyr và về cơ bản tôi đã đạt được mọi thứ tôi muốn. Tuy nhiên, mã của tôi chạy một thời gian và triển vọng tăng tốc mọi thứ đã đủ để tôi chạy một số thử nghiệm. Những bài kiểm tra đó kết thúc khá sớm và đây là lý do.Sử dụng Ngày tháng với gói data.table
Những gì tôi làm khá thường xuyên với plyr là để chia dữ liệu của tôi bằng một cột chứa ngày và làm một số tính toán:
library(plyr)
DF <- data.frame(Date=rep(c(Sys.time(), Sys.time() + 60), each=6), y=c(rnorm(6, 1), rnorm(6, -1)))
#Split up data and apply arbitrary function
ddply(DF, .(Date), function(df){mean(df$y) - df[nrow(df), "y"]})
Tuy nhiên, sử dụng một cột với ngày định dạng dường như không làm việc trong dữ liệu .table:
library(data.table)
DT <- data.table(Date=rep(c(Sys.time(), Sys.time() + 60), each=6), y=c(rnorm(6, 1), rnorm(6, -1)))
setkey(DT, Date)
#Error in setkey(DT, Date) : Column 'Date' cannot be auto converted to integer without losing information.
Nếu tôi hiểu gói chính xác, tôi chỉ nhận được tốc độ đáng kể khi tôi sử dụng setkey(). Ngoài ra, tôi nghĩ rằng nó sẽ không được mã hóa tốt để liên tục chuyển đổi giữa Ngày và số. Vì vậy, tôi thiếu một cái gì đó hoặc là chỉ có không có cách dễ dàng để đạt được điều đó với data.table?
sessionInfo()
R version 2.13.1 (2011-07-08)
Platform: x86_64-pc-mingw32/x64 (64-bit)
locale:
[1] C
attached base packages:
[1] grid stats graphics grDevices utils datasets methods base
other attached packages:
[1] data.table_1.6.3 zoo_1.7-2 lubridate_0.2.5 ggplot2_0.8.9 proto_0.3-9.2 reshape_0.8.4
[7] reshape2_1.1 xtable_1.5-6 plyr_1.5.2
loaded via a namespace (and not attached):
[1] digest_0.5.0 lattice_0.19-30 stringr_0.5 tools_2.13.1
Tôi chưa sử dụng data.table, nhưng lưu ý rằng Sys.time() trả về giá trị datetime 'POSIXct', không phải là' Date'. Đặc biệt, giá trị trả về (số giây trôi qua kể từ 1/1/1970) nói chung không phải là một giá trị tích phân, do đó chuyển đổi sang một số nguyên thực sự sẽ mất thông tin khi thông báo lỗi nói –
Lưu ý rằng dữ liệu có thể mang lại cải thiện đáng kể trong thời gian thực hiện ngay cả khi bạn không sử dụng 'setkey' – Andrie