我是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.
答案 0 :(得分:1)
cbind
和rbind
对所有输入强制执行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=
,days
,months
,years
,
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/