将不规则时间收集的数据转换为R

时间:2019-04-09 20:19:25

标签: r time-series

我在春季和夏季(月:5、6、7、8)(不一定是每天)以及30年以上收集了多变量数据。如何将其转换为时间序列对象以进行时间序列分析?

我尝试过: 时间序列<-ts(data,start(2017,5),频率= 4)

但是我不知道要使用的频率,因为它每年收集4次,但不是“季度”。

这是数据的样子:

    Year  Month Day   ID     Size      Sex      Temperature
    1 2017     5  13  033     54.0       M        13.0
    2 2017     5  15  044     53.5       F        11.0
    3 2017     5  16  141     55.8       M        15.7

我认为,对于缺少收集数据的月份和日期,我可能必须在数据中添加NA。我也不知道如何按年和月除...

1 个答案:

答案 0 :(得分:0)

1)使用结尾处“注释”中显示的数据(与问题稍有不同),根据“温度”来创建动物园系列,其温度为年+(月5)/ 4,减少多个值一个月内使用mean,然后将其全部转换为ts

library(zoo)
toYearMon <- function(x) x[[1]] + (x[[2]] - 5)/4
z <- read.zoo(DF[c("Year", "Month", "Day", "Temperature")], index = 1:3, 
  FUN = toYearMon, aggregate = mean)
as.ts(z)
##      Qtr1 Qtr2
## 2017 12.0 15.7

ts会认为这四个月是一个季度,但希望您能接受。交替使用z

2)另一种可能性是,从5月1日到8月31日(包括首尾两天)有123天,因此创建的时间变量是5月1日的年份+ 0,5月2日的年份+ 1/123,.. 。,年份+ 8月31日+ 122/123。

toDate <- function(x) as.Date(paste(x[[1]], x[[2]], x[[3]], sep = "-"))

sinceMay1 <- function(x) {
  d <- toDate(x)
  may1 <- toDate(data.frame(x[[1]], 5, 1))
  x[[1]] + as.numeric(d - may1) / 123
}

zsm <- read.zoo(DF[c("Year", "Month", "Day", "Temperature")], index = 1:3,
  FUN = sinceMay1)
frequency(zsm) <- 123

现在我们可以使用zsmas.ts(zsm)

3)的另一种可能性是

ts(DF$Temperature)

4)我们可以从上面创建toDate这样的动物园系列:

read.zoo(DF[c("Year", "Month", "Day", "Temperature")], index = 1:3,
  FUN = toDate)

注意

我们将上个月更改为6。

Lines <- "Year  Month Day   ID     Size      Sex      Temperature
    1 2017     5  13  033     54.0       M        13.0
    2 2017     5  15  044     53.5       F        11.0
    3 2017     6  16  141     55.8       M        15.7"
DF <- read.table(text = Lines)