我在時間序列上工作很多。我的大部分操作都通過data.table
做,但往往我要檢查數據通過特定的時間調用,併爲我用xts
方法:向data.table添加新方法
> timedata['2014-01-02/2014-01-03']
我data.table
數據基本上是xts
的精確副本,與第一colums index
,包含時間:
> dt_timedata <- data.table(index=index(timedata), coredata(timedata))
在某一點上的數據變得太大,因此保持雙方或將他們所有的時間是不是真的一個很好的選擇(這不可能是真的),所以我想製作的相同方法。但是,我只找到修改通用方法的簡單例子。
是我想甚至可能的,如果是的話,我可以在哪裏讀到它?
PS即使我可以abviosly使用類似
> from <- '2014-01-02'
> to <- '2014-01-03'
> period <- as.POSIXct(c(from, to))
> dt_timedata[index %between% period]
是遠遠不夠直觀和美觀,所以我寧願寫一個新的方法。
EDIT1(由請求示例)
require(xts)
require(data.table)
days <- as.POSIXct(c('2014-01-01', '2014-01-02', '2014-01-03', '2014-01-04'), origin='1970-01-01')
timedata <- xts(1:4, days)
dt_timedata <- data.table(index=index(timedata), coredata(timedata))
我可以在xts
做些什麼:
> timedata['2014-01-01/2014-01-02']
[,1]
2014-01-01 1
2014-01-02 2
我要爲[.data.table
完全一樣的。
EDIT2(說明我做什麼)
'[.data.table' = function(x, i, ...) {
if (!missing('i')) {
if (all(class(i) == "character")) {
# do some weird stuff
return(x[ *some indices subset I just created* ])
}
}
data.table:::'[.data.table'(x, i, ...)
}
所以基本上如果i
是性格和適合我的格式(檢查發生在怪異的東西節)我返回的東西和功能從來就沒有到最後的命令。否則什麼也沒有發生,我只是叫
data.table:::'[.data.table'(x, i, ...)
而事實是,這打破這樣的表達式
ind <- as.POSIXct('2014-01-01', origin='1970-01-01')
dt_timedata[index==ind]
這裏有一個簡單的例子,您可以嘗試:
require(data.table)
days <- as.POSIXct(c('2014-01-01', '2014-01-02', '2014-01-03', '2014-01-04'), origin='1970-01-01')
dt_timedata <- data.table(index=days, value=1:4)
ind <- as.POSIXct('2014-01-01', origin='1970-01-01')
# now it works
dt_timedata[index==ind]
# new trivial [.data.table
'[.data.table' = function(x, I, ...) {
data.table:::`[.data.table`(x, I, ...)
}
# and now it doesn't work
dt_timedata[index==ind]
你可以提供一個可重複的例子嗎? – nsheff 2014-09-19 14:25:38
@sheffien添加到帖子 – user2794728 2014-09-19 14:42:09