2016-11-21 1 views
1

그래서 나는 시간대가 "UTC"인 해에 xts 시간 세리에가 있습니다. 각 행 사이의 시간 간격은 15 분입니다.period.apply 시작 시간 결정과 함께

내 새로운 데이터 세트의 첫 번째 행이 2014-12-31 23:45:00입니다
dat <- period.apply(dat, endpoints(dat,on="hours",k=1), colSums) 

문제가되는 : 나는 한 시간 동안 데이터를 다른 데이터 세트와 비교를 원하는대로

     x1 x2 
2014-12-31 23:15:00 153.0 0.0 
2014-12-31 23:30:00 167.1 5.4 
2014-12-31 23:45:00 190.3 4.1 
2015-01-01 00:00:00 167.1 9.7 

, 나는 period.apply 사용하려 및 2015-01-01 00:00:00 아닙니다. 끝점 벡터를 변경해 보았지만 어쨌든 그것이 범위를 벗어났다는 것을 계속 말합니다. 나는 또한 이것이 내 대답이라고 생각했다 : https://stats.stackexchange.com/questions/5305/how-to-re-sample-an-xts-time-series-in-r/19003#19003하지만 그렇지 않았다. 내 열의 이름을 변경하고 싶지 않습니다. 다른 기간에 걸쳐 합을 원합니다. 여기

재현 예 :

library(xts) 
seq<-seq(from=ISOdate(2014,12,31,23,15),length.out = 100, by="15 min", tz="UTC") 
xts<-xts(rep(1,100),order.by = seq) 
period.apply(xts, endpoints(xts,on="hours",k=1), colSums) 

그리고 그 결과는 다음과 같습니다

2014-12-31 23:45:00 3 
2015-01-01 00:45:00 4 
2015-01-01 01:45:00 4 
2015-01-01 02:45:00 4 

과 같이 끝 :

2015-01-01 21:45:00 4 
2015-01-01 22:45:00 4 
2015-01-01 23:45:00 4 
2015-01-02 00:00:00 1 

난 항상 그것을 원하는 반면 같은 간격의 합계입니다. 즉, 나는 4s만을 원합니다.

+0

문제를 재현하는 샘플 데이터를 제공하면 누군가가 도움을 줄 수 있습니다. http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example 또는 http://meta.stackexchange.com/questions/176460/how-to-paste-data를 참조하십시오. -from-r-to-stackoverflow – FXQuantTrader

+0

제안 해 주셔서 감사합니다. 나는 그것을 더 명확하게하려고 노력했다! – Daldal

답변

1

문제는 당신이 endpoints를 사용하고 있다는 점이다 (나는 R의 64 3.3.2와 RStudio 0.99.903을 사용하고 있습니다),하지만 당신은 간격이 아니라 말의 시작으로 정렬합니다. this startpoints function을 사용할 수있을 것이라고 생각했지만 이상한 결과가났습니다.

아래의 해결 방법은 모든 색인 값에서 소량을 뺀 다음 endpointsperiod.apply을 집계하는 것입니다. 그런 다음 align.time으로 전화하십시오. 이것이 일반적인 해결책인지 확실하지 않지만, 귀하의 예를 위해 효과가있는 것으로 보입니다.

library(xts) 
seq<-seq(from=ISOdate(2014,12,31,23,15),length.out = 100, by="15 min", tz="UTC") 
xts<-xts(rep(1,100),order.by = seq) 
# create a temporary object 
tmp <- xts 
# subtract a small amount of time from each index value 
.index(tmp) <- .index(tmp)-0.001 
# aggregate to hourly 
agg <- period.apply(tmp, endpoints(tmp, "hours"), colSums) 
# round index up to next hour 
agg_aligned <- align.time(agg, 3600)