jimshsu
我有一串搭配时间序列的数据
V1 V2
1 20070621 26
2 20070621 25
3 20070621 28
4 20070621 27
5 20070622 26
6 20070622 24
7 20070622 29
如果我想要求出个别一天的mean
或是一个月的mean
我原本用for 循环去写判断
因为我的数据量很大~这种方式似乎很笨
请问有什么方式可以较快速吗?
yihui
?tapply
比如:
> (x=gl(2,10))
[1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2
Levels: 1 2
> (y=round(rnorm(20),2))
[1] 0.17 -1.64 0.55 -2.10 0.19 0.29 0.63 0.08 0.94 1.40 -0.21 0.99 0.64 -0.79
[15] -1.30 -1.60 0.99 1.72 0.97 -0.60
> tapply(y,x,mean)
1 2
0.051 0.081
前提是你得把要apply的INDEX设定好,若求每天的mean,你这个数据可以直接做,若要求每月的mean,那么你还得把第一列整理一下(用substring之类的函数提取月份)
jimshsu
感谢
我也试出一种方法
虽然好像没有版大的方法聪明
还是分享一下我的作法
我把时间序列当成数值
date<-cl$V1
dt<- as.integer(date/100) )
V2mean<-sapply(split(cl$V2,dt), mean)
另外
想请教一下
如果我多了个时间的字段
我想要分成每小时的mean
有什么方式可以把它切割出来?
V1 V2 V3
1 20070621 15:00 26
2 20070621 15:15 25
3 20070621 15:30 28
4 20070621 15:45 27
5 20070621 16:00 26
6 20070621 16:15 24
7 20070621 16:30 29
rtist
unique(predict(lm(V2~as.factor(V1),data=dat)))
[1] 26.50000 26.33333
yihui
如果你的数据都比较规则,那么可以用substring,比如
> substring("20070621 15:00", 10, 11)
[1] "15"