Как указать фрейм данных как временной ряд?

Я загружаю данные временных рядов в R для анализа. Я пытаюсь запаздывать по одной из переменных, чтобы различать серию. К сожалению, все значения переменных разницы равны 0, потому что R не удалось запаздывать по весовой переменной. Я знаю, что должен использовать as.ts (data $ date), чтобы указать, что эта переменная даты является временным рядом, но каждый раз, когда я это делаю, она меняет переменную даты на числовые числа. Не говоря уже о том, что я думал, что указал, что столбец даты в наборе данных был переменной времени / даты, когда я его изначально загрузил. Как я могу указать data.frame в качестве временного ряда?

data=read.csv("filelocation",header=T,colClasses=c("Date","numeric")

  date   weight
2010-10-04 52495    
2010-10-01 53000    
2010-09-30 52916    
2010-09-29 52785    
2010-09-28 53348    
2010-09-27 52885    
2010-09-24 52174    
2010-09-23 51461    
2010-09-22 51286    
2010-09-21 50968    
2010-09-20 49250

data=data[order(data$date),]
diffweight1=weight-lag(weight,1)

person gabriel    schedule 22.12.2012    source источник


Ответы (4)


Попробуй это:

library(zoo)

z <- read.zoo("filelocation", header = TRUE, sep = ",")
diff(z)
person G. Grothendieck    schedule 22.12.2012
comment
Спасибо за ответ Grothen. read.zoo работает, если у вас есть файл xls. Файлы CSV загружаться не будут. Есть ли команда read.zoocsv? - person gabriel; 22.12.2012
comment
@gabriel, read.zoo читает текстовые файлы, создавая объект зоопарка. Я обновил ответ, добавив sep = ",". - person G. Grothendieck; 23.12.2012
comment
Понятно, read.zoo читает только файлы .txt. Что делать, если у вас есть файл csv? Тогда будет ли пакет xts, как указано agestudy, лучшим методом? Спасибо! - person gabriel; 23.12.2012
comment
@gabriel, csv файл - это текстовый файл. - person G. Grothendieck; 23.12.2012
comment
Ах я вижу. Я чувствую себя глупо. Сделанное вами редактирование было действительно важным, потому что файлы csv (файлы txt) разделены запятыми. Отсюда необходимость (sep =,), спасибо за вашу помощь и терпение, Grothen! - person gabriel; 23.12.2012

когда вы манипулируете временными рядами, лучше использовать пакеты (zoo или xts). Многие операции с временными рядами в виде запаздываний и различий становятся очень простыми.

вот пример использования пакета xts (я предпочитаю этот)

# I read your data
dat <- read.table (text = 'date   weight
2010-10-04 52495    
2010-10-01 53000    
2010-09-30 52916    
2010-09-29 52785    
2010-09-28 53348    
2010-09-27 52885    
2010-09-24 52174    
2010-09-23 51461    
2010-09-22 51286    
2010-09-21 50968    
2010-09-20 49250',header=TRUE)
# I construct my xts object
dat.xts <- xts(dat$weight,order.by=as.POSIXct(dat$date))
# new 2 columns withs lags(1) and diff

merge(dat.xts, ll = lag(dat.xts),dd =diff(dat.xts))
           dat.xts    ll   dd
2010-09-20   49250    NA   NA
2010-09-21   50968 49250 1718
2010-09-22   51286 50968  318
2010-09-23   51461 51286  175
2010-09-24   52174 51461  713
2010-09-27   52885 52174  711
2010-09-28   53348 52885  463
2010-09-29   52785 53348 -563
2010-09-30   52916 52785  131
2010-10-01   53000 52916   84
2010-10-04   52495 53000 -505
person agstudy    schedule 22.12.2012
comment
Спасибо agestudy! Из вашего кода кажется, что R только распознает, что данные временного ряда на самом деле являются временными рядами, если в переменной даты указано время. Я прав? Ваша команда as.POSIXct (dat $ date) по существу заставила переменную даты иметь время / (часы, минуты, секунды), связанное с переменной? - person gabriel; 22.12.2012
comment
Я также заметил, что при использовании пакета xts данные, которые я использовал, больше не превращались в data.frame. - person gabriel; 22.12.2012

Я чувствую, что вам нужна разница между соседними строками для веса col. Вы можете попробовать:

weight <- c(20,40,70,110)
diff(weight)
[1] 20 30 40

так как 40-20 = 20, 70-40 = 30 и т. д. аналогичным образом попробуйте difftime для временных рядов, если вам это нужно

person Utkarsh Naiknaware    schedule 22.12.2012

Объекты временных рядов предназначены для отслеживания данных, отобранных в равные промежутки времени. У вас неравномерный интервал выборки, но похоже, что ts(data) делает то, что вы ищете.

person Blue Magister    schedule 22.12.2012