R_Dividing时间序列到月,年,季节

时间:2014-03-27 15:31:29

标签: r time-series

我是R的新用户。我有一个有四年数据的时间序列(比如来自不同站点的观察,a-f),间隔是12小时。我实际上使用

添加了第一列
 t<-seq(from=as.POSIXct("2009-9-25 18:00", tz="cet"),by="12 hours", length.out=NROW(obs))
 obsf<-cbind(t,obs)

其中&#39; obs&#39;作为观察矩阵。在下面找到数据框的前四行。 (我不知道为什么&#39;列显示为数字而非时间戳)

              t        a        b         c       d        e        f              
[1,] 1253894400 108.6912 107.7886 107.1125 106.7521 106.7440 107.0581  
[2,] 1253937600 109.1711 108.8854 108.6159 108.4135 108.2789 108.1683  
[3,] 1253980800 104.1059 103.2223 102.5102 102.0592 101.9324 102.1317  
[4,] 1254024000 104.7609 104.5823 104.3817 104.2230 104.1266 104.0673  

我想将数据框划分为每年和每年每月进行一些分析。我认为有很多方法可以做到这一点。我不知道哪一个更适合这种情况。有人可以帮忙吗?我不想使用任何软件包,并希望尝试使用基本的R函数,因为它可以帮助我更好地理解R.

2 个答案:

答案 0 :(得分:1)

cbindrbind对所有输入强制执行class。 e.g:

cbind(character=letters[1:5],numeric=seq(1:5))

作为

     character numeric
[1,] "a"       "1"    
[2,] "b"       "2"    
[3,] "c"       "3"    
[4,] "d"       "4"    
[5,] "e"       "5" 

此处numeric输入已转换为character,以匹配第1列的class

在以下情况中观察到相同的行为:

使用cbind:

cbind(date=seq(from=as.POSIXct("2009-9-25 18:00", tz="cet"),by="12 hours", length.out=5),Variable=seq(1:5))

<强>输出:

           date Variable
[1,] 1253894400        1
[2,] 1253937600        2
[3,] 1253980800        3
[4,] 1254024000        4
[5,] 1254067200        5

使用data.frame:

data.frame(date=seq(from=as.POSIXct("2009-9-25 18:00", tz="cet"),by="12 hours", length.out=5),Variable=seq(1:5))

<强>输出

                 date Variable
1 2009-09-25 18:00:00        1
2 2009-09-26 06:00:00        2
3 2009-09-26 18:00:00        3
4 2009-09-27 06:00:00        4
5 2009-09-27 18:00:00        5

您可以按时间范围使用时间序列包(如xts)到子集:

从data.frame转换为xts

时间索引进入order.by,其余数据作为第一个输入。

test.df<-data.frame(date=seq(from=as.POSIXct("2009-9-25 18:00", tz="cet"),by="12 hours", length.out=200),Variable=seq(1:200))
test.xts<-xts(test.df[,-1],order.by=test.df[,1])

<强>子集

endpoints根据选项on=daysmonthsyears

的输入提供时间索引
test.xts[endpoints(test.xts,on="years",k=1),]
                    [,1]
2009-12-31 17:00:00  195
2010-01-03 05:00:00  200

test.xts[endpoints(test.xts,on="months",k=1),]
                    [,1]
2009-09-30 18:00:00   11
2009-10-31 17:00:00   73
2009-11-30 17:00:00  133
2009-12-31 17:00:00  195
2010-01-03 05:00:00  200

答案 1 :(得分:1)

既然你提到你是R的新用户,并且你正在使用时间序列,我强烈推荐在线免费书“时间序列的R小书”,其中简要介绍了阅读,绘图和时间建模系列数据。

http://a-little-book-of-r-for-time-series.readthedocs.org/en/latest/