2011-10-31 36 views

Trả lời

38

Một cách khác là để định dạng các đối tượng sử dụng "POSIXt"strftime():

R> today <- Sys.time() 
R> today 
[1] "2012-10-19 19:12:04 BST" 
R> doy <- strftime(today, format = "%j") 
R> doy 
[1] "293" 
R> as.numeric(doy) 
[1] 293 

đó là thích hợp hơn để ghi nhớ rằng ngày của năm là zero-có trụ sở tại các tiêu chuẩn POSIX.

+0

Chỉ cần chạy vào tập dữ liệu đầu tiên của tôi với cột 'POSIXct'. Dường như thời gian để đánh dấu bạn là câu trả lời được chấp nhận. – Gregor

+0

@Gavin, bạn cũng có thể chuyển đổi ngày thành ngày kể từ dữ liệu được chỉ định, ví dụ: số ngày kể từ ngày 1 tháng 3 năm 2015? Tôi cũng có thể đăng như một câu hỏi mới ... –

+1

@ B.Davis Bạn có thể làm một cái gì đó như 'as.numeric (Sys.Date() - as.Date ('2015-03-01', format = '% Y- % m-% d ')) ' – Henry

17

Khi ?POSIXlt tiết lộ, hậu tố $yday đến POSIXlt ngày (hoặc thậm chí một véc tơ như vậy) sẽ chuyển thành ngày trong năm. Lưu ý rằng POSIX tính ngày 1 tháng 1 là ngày 0, vì vậy bạn có thể muốn thêm 1 vào kết quả.

Tôi mất rất nhiều thời gian để tìm thấy điều này, vì vậy tôi nghĩ mình muốn ask and answer my own question.

Cách khác, gói lubridate xuất sắc cung cấp chức năng yday, đây chỉ là trình bao bọc cho phương thức trên. Nó thuận tiện xác định các chức năng tương tự cho các đơn vị khác (month, year, hour, ...).

today <- Sys.time() 
yday(today) 
+0

Một phần lý do tại sao tôi mất quá lâu nếu 'd' là đối tượng POSIXlt,' str (d) 'không cho biết dấu hiệu' d' có bất kỳ thuộc tính nào nữa. Điều này, và rằng toán tử '$' hoạt động trên nền vector của các đối tượng POSIXlt có nghĩa là nhiều hơn là một khai thác thông thường đang diễn ra. Tôi muốn quan tâm đến việc đọc thêm một chút về điều đó nếu có ai đó có thể giới thiệu một nơi tốt đẹp để bắt đầu. – Gregor

+0

Và, để trả lời nhận xét của riêng tôi, 'thuộc tính' là lệnh mà tôi đang tìm kiếm,' thuộc tính (d) 'cung cấp tất cả các cách hiển thị' d'. – Gregor

+0

Heh, tôi cũng đang đấu tranh với câu hỏi này. Có vẻ như bạn đã tự trả lời (trái ngược với việc chỉ thực hiện nó mà không cần đăng nó ở đây). Cảm ơn vì điều đó! – Mikko

0

Đây là cách làm thế nào tôi làm điều đó:

as.POSIXlt(c("15.4", "10.5", "15.5", "10.6"), format = "%d.%m")$yday 
# [1] 104 129 134 160 
+0

Hoạt động tốt cho' POSIXlt' (như đã đề cập trong câu trả lời của tôi), nhưng không hoạt động cho các đối tượng 'POSIXct'. Ví dụ: 'Sys.time() $ yday' không hoạt động. – Gregor

2

Tôi nhận ra nó không phải là khá những gì người đăng đã được tìm kiếm, nhưng tôi cần phải chuyển đổi POSIX date- lần thành một phân đoạn ngày trong năm để phân tích chuỗi thời gian và kết thúc thực hiện việc này:

today <- Sys.time() 

doy2015f<-difftime(today,as.POSIXct(as.Date("2015-01-01 00:00", tzone="GMT")),units='days') 
+0

Rất hữu ích! Bạn đã nhận được phiếu bầu của tôi. – Gregor

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