3

我正在将时间序列数据加载到 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)
4

4 回答 4

4

试试这个:

library(zoo)

z <- read.zoo("filelocation", header = TRUE, sep = ",")
diff(z)
于 2012-12-22T09:56:36.413 回答
3

当您操作时间序列时,最好使用(zoo 或 xts)包。很多时间序列运算由于滞后,diff 变得非常简单。

这里是一个使用 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
于 2012-12-22T07:12:11.200 回答
1

我觉得您需要的是 weight col 相邻行之间的差异您可以尝试:

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

因为 40 - 20 = 20, 70 - 40 = 30 等等类似地尝试时间序列的 difftime 以防万一

于 2012-12-22T06:12:53.857 回答
1

时间序列对象旨在跟踪在等间隔时间点采样的数据。您的采样间隔不均匀,但ts(data)似乎可以满足您的要求。

于 2012-12-22T06:33:47.197 回答