2015-06-25 2 views
5

В следующем примере может кто-нибудь объяснить мне, почему дата 2015-03-31 изменилась на 1034-04-03?Присоединение столбца столбца POSIXct к столбцу с использованием data.table в 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 

Моя цель состоит в том, чтобы получить date от dt1 к dt2 в Date формате вместо POSIXct по id (разные id будет иметь различную date). Как мне это сделать?

После чего я хочу:

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

EDIT:

Я пробовал следующее:

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

К сожалению, это дает мне 2015- 03-30 вместо 2015-03-31 ... ??? Как получить 2015-03-31 вместо этого?

+0

Можете ли вы записать данные образца? – user227710

+3

Ваш код, вероятно, должен содержать хотя бы предупреждение. Пожалуйста, [укажите отчет об ошибке] (https://github.com/Rdatatable/data.table/issues). – Roland

+2

Chengcj, @Roland, подано [# 1200] (https://github.com/Rdatatable/data.table/issues/1200). – Arun

ответ

2

Вы можете использовать

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

Вы можете также видеть вопрос Convert column classes in data.table об изменении типов данных в data.tables.

+0

К сожалению, если я сделаю то, что вы предложили, я получу 2015-03-30 вместо 2015-03-31 .... Как получилось? – chengcj

+3

@chengcj Это очень вероятно проблема с часовым поясом. Передайте часовой пояс на 'as.Date'. – Roland

Смежные вопросы