2015-06-25 20 views
5

Trong ví dụ sau, ai đó có thể giải thích cho tôi tại sao ngày 2015-03-31 thay đổi thành 1034-04-03 không?Tham gia cột POSIXct vào cột Ngày bằng cách sử dụng data.table trong 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 

Mục tiêu của tôi là để có được date từ dt1 để dt2 ở định dạng Date thay vì POSIXct bởi id (khác id sẽ phải khác nhau date). Tôi sẽ làm như thế nào?

Sau đây là những gì tôi muốn:

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

EDIT:

Tôi đã thử những điều sau đây:

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

Thật không may, nó được đem lại cho tôi 2015- 03-30 thay vì 2015-03-31 ... ??? Làm thế nào để có được 2015-03-31 thay vào đó?

+0

Bạn có thể trích xuất dữ liệu mẫu không? – user227710

+3

Mã của bạn có lẽ nên đưa ra ít nhất một cảnh báo. Vui lòng [gửi báo cáo lỗi] (https://github.com/Rdatatable/data.table/issues). – Roland

+2

Chengcj, @Roland, đã gửi [# 1200] (https://github.com/Rdatatable/data.table/issues/1200). – Arun

Trả lời

2

Bạn có thể sử dụng

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

Bạn có thể cũng muốn biết câu hỏi Convert column classes in data.table về việc thay đổi các kiểu dữ liệu trong data.tables.

+0

Thật không may, nếu tôi làm những gì bạn đã đề xuất, tôi nhận được 2015-03-30 thay vì 2015-03-31 .... Làm thế nào đến? – chengcj

+3

@chengcj Điều đó rất có thể là vấn đề múi giờ. Chuyển múi giờ của bạn thành 'as.Date'. – Roland

Các vấn đề liên quan