2015-03-23 27 views
17

Làm cách nào để trích xuất ngày từ chuỗi thời gian? Đây là một chuỗi thời gian:R: Cách trích xuất ngày từ một chuỗi thời gian

x = seq (1, 768) 
myts <- ts(x, start=1982, frequency=24) 

Nguyên tôi cần phải tạo ra một vector giữ dữ liệu ngày/giờ cho rts chức năng, Các quan sát bắt đầu năm 1982 với 2 phép đo mỗi tháng sẽ đến 2013.

Trả lời

24

Hãy thử:

time(myts) 

hoặc có lẽ:

library(zoo) 
as.yearmon(time(myts)) 
3

Trong trường hợp bạn cần POSIX* đối tượng - có thể không phù hợp khi làm việc với dữ liệu nửa tháng, nhưng có thể hữu ích khi xử lý các độ phân giải thời gian cao hơn - bạn cũng có thể sử dụng date_decimal từ lubridate.

library(lubridate) 
mts <- as.numeric(time(myts)) 

## 'POSIXct, POSIXt' object 
tms <- date_decimal(mts) 
0

Vấn đề ban đầu được đưa ra trong câu hỏi là duy nhất khó khăn bởi vì nó có chứa một mẫu phi tiêu chuẩn, tức là 24 lần mỗi năm, và do đó bạn sẽ phải sử dụng những cách phi tiêu chuẩn để trích xuất các ngày mà những người khác có được bảo hiểm đầy đủ. Đối với những người vấp ngã khi câu hỏi này có chuỗi thời gian tiêu chuẩn hơn thì giải pháp đơn giản hơn.

x <- 1:(768/2) ## shorten the ts to reflect lower sampling rate 
myts <- ts(x, start = c(1982, 1), frequency = 12) ## now one sample per month 
dates <- as.Date(myts) 
1

Bạn có thể sử dụng chức năng sau. Dữ liệu nhập là một chuỗi thời gian trong r. Và đầu ra là một danh sách chứa mọi thời gian mảng từ thời gian bắt đầu đến thời gian kết thúc.

Với sự trợ giúp của danh sách, bạn có thể sử dụng chức năng window() để cắt ngắn chuỗi thời gian rất thuận tiện.

getTStime <- function(ats){ 
    start <- start(ats) 
    end <- end(ats) 
    time <- list() 
    time[[1]] <- start 
    m <- 2 
    while(!(identical(start, end))){ 
    start[2] <- start[2] + 1 
    if (start[2]==13){ 
     start[1] <- start[1] + 1 
     start[2] <- 1 
    } 
    time[[m]] <- start 
    m <- m + 1 
    } 
    return(time) 
} 
Các vấn đề liên quan