Natrafiłem dzisiaj na następujący problem i zastanawiam się, czy istnieje lepszy sposób na zrealizowanie tego, co próbuję zrobić.Używanie data.table z funkcjami zastępczymi w r
Załóżmy Mam następujący data.table
(tylko datownik godzinowy):
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
Moim celem jest, aby zmienić protokół z datownika do, powiedzmy, 10 minut.
wiem, że mogę używać:
library(lubridate)
minute(tdt$Timestamp) <- 10
ale nie wykorzystują super szybkość z tabeli danych (które potrzebujesz). Na moim laptopie to trwało:
> system.time(minute(tdt$Timestamp) <- 10)
user system elapsed
11.29 0.16 11.45
Więc moje pytanie brzmi: Czy możemy w jakiś sposób wykorzystać funkcję zastępczą w składni tabeli danych tak, że będzie robić to, co chcę używając data.table
„s prędkość? Jeśli odpowiedź brzmi "nie", to wszelkie inne rozwiązanie, aby zrobić to szybko, byłoby do przyjęcia.
Jeśli zastanawiasz się jedną z rzeczy, próbowałem to:
tdt[, Timestamp2 := minute(Timestamp) <- 10]
który nie działa.
oczekiwany wynik (ale z tabeli danych składni):
> 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
* I * myślę to może skierować Cię w dobrym kierunku: http://stackoverflow.com/questions/10449366/levels-what-sorcery -czy to jest . Ale przynajmniej od ubiegłego roku 'data.table' nie obsługuje dobrze formatów daty/czasu. Być może poprawił się już teraz. –
Co powiecie na 'tdt [, Timestamp: = Timestamp + 600L]'? –
@ AriB.Friedman Dzięki za ten link. Widziałem to pytanie i zdaję sobie sprawę z tego, jak działa funkcja zastępowania, ale nadal nie byłem w stanie tego w jakiś sposób wykorzystać ... – LyzandeR