2015-06-25 30 views
5

Czy w poniższym przykładzie ktoś może mi wyjaśnić, dlaczego data 2015-03-31 została zmieniona na 1034-04-03?Łączenie kolumnę POSIXct z kolumną Data za pomocą data.table w R

dt1 = data.table(id = c(1,2), date = as.POSIXct("2015-03-31 BST"), key = "id") 
dt1 
# id  date 
# 1: 1 2015-03-31 
# 2: 2 2015-03-31 
dt2 = data.table(id = c(1,2), date = as.Date(NA), key = "id") 
dt2 
# id date 
# 1: 1 <NA> 
# 2: 2 <NA> 
dt2[dt1, date := i.date] 
dt2 
# id  date 
# 1: 1 1034-04-03 
# 2: 2 1034-04-03 

Moim celem jest, aby date z dt1 do dt2 w formacie Date zamiast POSIXct przez id (inna id miałoby inny date). Jak to zrobić?

obserwuję to co chcę:

dt2 
# id  date 
# 1: 1 2015-03-31 
# 2: 2 2015-03-31 

EDIT:

Próbowałem następujące:

dt2[dt1, date := as.Date(i.date)] 
dt2 
# id  date 
# 1: 1 2015-03-30 
# 2: 2 2015-03-30 

Niestety, to daje mi 2015- 03-30 zamiast 2015-03-31 ... ??? Jak zdobyć 2015-03-31?

+0

Czy możesz podać dane próbki? – user227710

+3

Twój kod prawdopodobnie powinien dać przynajmniej ostrzeżenie. Proszę [zgłoś zgłoszenie błędu] (https://github.com/Rdatatable/data.table/issues). – Roland

+2

Chengcj, @Roland, wypełniony [# 1200] (https://github.com/Rdatatable/data.table/issues/1200). – Arun

Odpowiedz

2

Można użyć

dt2[dt1, date:=as.Date(i.date)] 

Czasami warto też zobaczyć pytanie Convert column classes in data.table temat zmiany typów danych w data.tables.

+0

Niestety, jeśli zrobię to, co zaproponowałeś, otrzymam 2015-03-30 zamiast 2015-03-31 .... Jak to możliwe? – chengcj

+3

@chengcj To bardzo prawdopodobne, że problem dotyczy strefy czasowej. Przekaż swoją strefę czasową do 'as.Date'. – Roland