Oggi mi sono imbattuto nel seguente problema e mi chiedo se esiste un modo migliore per realizzare ciò che sto cercando di fare.Utilizzo di data.table con funzioni di sostituzione in
Supponiamo Ho il seguente data.table
(solo un timestamp ogni ora):
library(data.table)
tdt <- data.table(Timestamp = seq(as.POSIXct("1980-01-01 00:00:00"), as.POSIXct("2015-01-01 00:00:00"), '1 hour'))
> tdt
Timestamp
1: 1980-01-01 00:00:00
2: 1980-01-01 01:00:00
3: 1980-01-01 02:00:00
4: 1980-01-01 03:00:00
5: 1980-01-01 04:00:00
---
306813: 2014-12-31 20:00:00
306814: 2014-12-31 21:00:00
306815: 2014-12-31 22:00:00
306816: 2014-12-31 23:00:00
306817: 2015-01-01 00:00:00
Il mio obiettivo è quello di cambiare il verbale della timestamp, per esempio, 10 minuti.
So che posso usare:
library(lubridate)
minute(tdt$Timestamp) <- 10
ma questo non utilizza la velocità veloce eccellente di tabella di dati (che ho bisogno). Sul mio portatile ha preso questo:
> system.time(minute(tdt$Timestamp) <- 10)
user system elapsed
11.29 0.16 11.45
Quindi, la mia domanda è: Possiamo usare in qualche modo una funzione di sostituzione nella sintassi tabella di dati in modo che possa fare quello che voglio con data.table
's di velocità? Se la risposta è no, qualsiasi altra soluzione di data.table
per fare questo veloce, sarebbe accettabile.
Se vi chiedete una delle cose che ho provato è:
tdt[, Timestamp2 := minute(Timestamp) <- 10]
che non funziona.
Output previsto (ma con tabella dati sintassi):
> tdt
Timestamp
1: 1980-01-01 00:10:00
2: 1980-01-01 01:10:00
3: 1980-01-01 02:10:00
4: 1980-01-01 03:10:00
5: 1980-01-01 04:10:00
---
306813: 2014-12-31 20:10:00
306814: 2014-12-31 21:10:00
306815: 2014-12-31 22:10:00
306816: 2014-12-31 23:10:00
306817: 2015-01-01 00:10:00
* think * questo può puntare nella giusta direzione: http://stackoverflow.com/questions/10449366/levels-what-sorcery -è questo . Ma almeno lo scorso anno 'data.table' non supportava bene i formati data/ora. Potrebbe essere migliorato ormai. –
Che dire di solo 'tdt [, Timestamp: = Timestamp + 600L]'? –
@ AriB.Friedman Grazie per questo collegamento. Ho visto questa domanda e sono a conoscenza di come funziona una funzione di sostituzione, ma non ero ancora in grado di usarla in quel modo ... – LyzandeR