2017-04-25 5 views
0

비교적 간단한 질문이지만 어떤 예제도 찾을 수 없습니다. 등R - 시계열에서 다음으로 높은 값

Datetime, Price 
2016-09-01 00:00:01, 1.11563 
2016-09-01 00:00:01, 1.11564 
2016-09-01 00:00:02, 1.11564 
2016-09-01 00:00:03, 1.11565 

...과 :

는 I 간단 외환 가격 2 열 XTS 객체라고 subx1에서 데이터를 갖는다.

나는 가격이 다른 개체의 열라고 daypeakxts $ before2.High에서 개최

daypeakxts의 샘플이

되는 사전 오후 2시 높은 이상 갈 때 오후 2시 후 처음을 찾기 위해 노력하고있어 그래서 내가 조건부 역을 사용하여 가격에 날짜를 발견 찾고 있어요 ...

subxresult <- index(subx1, subx1$datetime > daypeakxts$before2.High) 

을 :

Date, before2.High 
2016-09-01, 1.11567  
2016-09-02, 1.11987 

이 내가 할 노력하고있어의 나쁜 예입니다 또 다른 xts 객체에서 하루의 값으로 tement.

+1

적절한 번역과 함께 'which.max (시간> 2PM 및 값> 이전 값)'같은 것을 사용해보십시오. – lmo

+0

감사합니다. 나는 일반 data.frame로 변환 한 다음 시도 : subxresult <- which.max (subx1의 $ DT는 == daypeakxts의 $ 날짜 및 subx의 $ 가격> daypeakxts $ before2.High) 하지만 오류가 발생했습니다 : "더 긴 오브젝트 길이가 더 짧은 오브젝트 길이의 배수가 아닙니다." 저는 한 인스턴스에서 날짜를 사용하고 있습니다 (해당 날짜의 최고 2pm 전 가격). 주 타임 시리즈의 날짜 - 시간입니다. 두 가지 모두 POSIX 형식입니다. – nycrefugee

답변

2

reproducible example에 대한 충분한 데이터를 제공하지 않으므로 xts 패키지와 함께 제공되는 일별 데이터를 사용하겠습니다.

library(xts) 
data(sample_matrix) 
x <- as.xts(sample_matrix, dateForamt = "Date") 

# Aggregate and find the high for each week 
Week.High <- apply.weekly(x, function(x) max(x$High)) 

# Finding the pre-2pm high would be something like: 
# Pre.2pm.High <- apply.daily(x["T00:00/T14:00"], function(x) max(x$High)) 

# Merge the period high with the original data, and 
# fill NA with the last observation carried forward 
y <- merge(x, Week.High, fill = na.locf) 

# Lag the period high, so it aligns with the following period 
y$Week.High <- lag(y$Week.High) 

# Find the first instance where the next period's high 
# is higher than the previous period's high 
y$First.Higher <- apply.weekly(y, function(x) which(x$High > x$Week.High)[1]) 
+0

나는 당신의 해결책을 시도했다. 그것은 당신을 위해 일해 왔습니다 - 그리고 꽤 적응했습니다. – nycrefugee

관련 문제