2011-02-01 29 views
7

Tôi có tập dữ liệu mã hóa ngày giờ thành hai biến riêng biệt. Thông thường, tôi chỉ dán chúng lại với nhau bên trong một as.POSIXct và tiếp tục. Tuy nhiên, ngày được cung cấp dưới dạng chuỗi và thời gian trong ngày là một phần của 24 giờ - ví dụ: 12 giờ tối là 0,5, 9:30 sáng là 0.1458333, v.v.Chuyển đổi phần nhỏ trong ngày thành POSIX lần trong R

Nó dường như không khó để chuyển đổi các ngày phân số thành giờ đồng hồ, nhưng tôi muốn sử dụng một hàm sẵn có nếu có thể. Có cái gì đó như thế tồn tại trong cơ sở R? Một gói?

Nếu sử dụng bất kỳ, đây là trường thời gian Excel (xlsx) được nhập vào R qua RODBC.

EDIT Rất kỳ quặc, khi xem lại vấn đề này, giờ được đọc ở dạng POSIXct. Không biết phải làm gì.

+0

Haha. Điều này nghe có vẻ như kinh nghiệm của tôi đọc một tập tin xls. Một ngày tôi viết mã R để chuyển đổi từ một ngày Excel số, sau đó một tuần sau đó tôi chỉnh sửa các xls với một số dữ liệu mới, và khi tôi đọc nó trong R, ngày tháng là văn bản. Bạn có thể chơi xung quanh với định dạng ô trong Excel để sửa nó. –

+0

Nếu bạn áp dụng một định dạng cutom cho một thời gian dat trong Excel các giá trị đến các tập tin văn bản-csv sẽ làm theo định dạng đó. Tôi muốn đề xuất 'yyyy-mm-dd hh: mm: ss AM/PM' hoặc 'yyyy-mm-dd hh: mm: ss'. Tôi không có cấu hình RODBC nên không thể kiểm tra xem điều đó có ảnh hưởng đến chuyển DB hay không. –

Trả lời

5

giá trị POSIXct chỉ đơn giản là số giây kể từ nửa đêm giờ 1970/01/01. (Vì vậy, bạn cần phải chú ý đến bù đắp của bạn từ UTC.) Bạn có thể sử dụng phần ngày và thêm số ngày 24 * 3600 (as.Date (dtval) giá trị thời gian của bạn * 24 * 3600. Gabor chỉ vào bài viết trong R News (mà ông đã viết, cảm ơn bạn, Gabor.)

Bạn không đưa ra ví dụ về chuỗi. Nếu bạn nhận được ngày của bạn dưới dạng chuỗi, sau đó as.Date (strDate) sẽ chuyển đổi biến "strDate" thành lớp Date khi nó ở định dạng "YYYY-MM-DD" hoặc "YYYY/MM/DD" .Nếu không, mã định dạng nằm trên trang strptime?

Khi bạn có POSIXct- biến được phân loại bạn chỉ có thể thêm số giây. Ví dụ này thêm 30 phút đến nửa đêm hôm nay ngày 1 tháng 2 năm 2011 (trong múi giờ của tôi là UTC-5):

> as.POSIXct(as.Date("2011-02-01")) +30*60 
[1] "2011-01-31 19:30:00 EST" 

Và đây là giá trị thời gian của bạn thêm vào nửa đêm thời gian của tôi:

> as.POSIXct(as.Date("2011-02-01 00:00", tzone="UTC"))+3600*5 + 3600*24*timeval 
[1] "2011-02-01 03:29:59 EST" 
+0

Tôi không hiểu điều này. 'Timeval' trong khối mã thứ hai là gì? –

+0

Đó là bất cứ cái tên nào bạn gán cho giá trị đó là 0.1458333. Bạn nhân nó với số giây trong một ngày. –

+0

Cảm ơn. Tôi đã sử dụng ý tưởng này để thực hiện thao tác nghịch đảo: Thay đổi thời gian posixCT thành các ngày phân số với: (timeval-as.POSIXct (...))/86400. Nó rất hữu ích cho việc phân tích chuỗi thời gian trong các cơ sở thời gian khác so với Hz, chẳng hạn như chu kỳ mỗi ngày. –

6

Các R News 4/1 Help Desk bài viết có một phần trên đọc ngày Excel trong R.

+0

p. 30, cụ thể là –

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