2015-06-25 9 views
5

Im folgenden Beispiel kann mir jemand erklären, warum das Datum 2015-03-31 in 1034-04-03 geändert?Beitritt einer POSIXct-Spalte zu Datum Spalte mit data.table in 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 

Mein Ziel ist es date von dt1 zu dt2 in Date Format zu erhalten, anstatt POSIXct von id (verschiedene id würden unterschiedliche date haben). Wie würde ich das tun?

Es folgt, was ich will:

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

EDIT:

ich folgendes versucht haben:

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

Leider ist es mir gibt 2015- 03-30 statt 2015-03-31 ... ??? Wie bekommt man stattdessen 2015-03-31?

+0

Können Sie die Beispieldaten eingeben? – user227710

+3

Ihr Code sollte wahrscheinlich mindestens eine Warnung geben. Bitte [melden Sie einen Fehlerbericht] (https://github.com/Rdatatable/data.table/issues). – Roland

+2

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

Antwort

2

können Sie verwenden

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

Sie möchten vielleicht auch die Frage sehen Convert column classes in data.table über Datentypen in data.tables ändern.

+0

Leider, wenn ich das mache, was Sie vorgeschlagen haben, bekomme ich 2015-03-30 statt 2015-03-31 .... Wie kommt es? – chengcj

+3

@chenchj Das ist sehr wahrscheinlich ein Zeitzonenproblem. Übergeben Sie Ihre Zeitzone an 'as.Date'. – Roland

Verwandte Themen