2017-11-11 20 views
1

에서 XTS 객체의 특정 시간 이전에 데이터를 찾기 :나는 두 <code>xts</code> 데이터 세트, 주문 책과 시장 데이터를 가지고 있고, 그들은 다음과 유사한 즉시 R

주문 도서 :

Time     |  Price 
------------------------------------- 
2017-01-02 10:00:02 |  5.00 
2017-01-02 10:00:05 |  6.00 
2017-01-02 10:00:13 |  5.00 
2017-01-02 10:00:16 |  4.00 
2017-01-02 10:00:24 |  2.00 

시장 데이터 :

Time     |  Ask Price 
--------------------------------------- 
2017-01-02 10:00:01 |  4.00 
2017-01-02 10:00:02 |  3.00 
2017-01-02 10:00:27 |  1.00 
2017-01-02 10:00:56 |  2.00 
2017-01-02 10:00:57 |  1.00 

지금 주문 책의 각 관찰 나는 stictly 오의 주문 시점 이전에 시장 데이터 관찰을 찾을 싶습니다 책. 예를 들어 위의 두 데이터 세트에서 주문서의 관찰 3을 보면 시장 데이터가 시장 데이터의 인덱스 2 (즉, 시간은 10:00:05)에 있습니다.

이제 내가 따라야하는 두 가지 조건이 있습니다. 첫째, 전에 언급했듯이 시장 데이터 관찰은 주문서 관찰 전 엄격히 이루어져야합니다. 두 번째 조건은 두 관측 모두가 같은 날에 일어나야한다는 것입니다. 나는 실제로이 작업을 시도하고 수행하기 위해 두 가지 다른 함수를 작성했지만 둘 다 다른 결과를 주므로 잘못된 것이라고 확신합니다. 누군가가 이것을 조금 도와 줄 수 있다면 정말 고맙겠습니다! 미리 감사드립니다.

답변

0
require(data.table) 
require(lubridate) 
################ 
# Recreate data 
################# 
s<- 
    "2017-01-02 10:00:02 5.00 
    2017-01-02 10:00:05 6.00 
    2017-01-02 10:00:13 5.00 
    2017-02-02 10:00:16 4.00 
    2017-02-02 10:00:24 2.00" 
# note I changed the date in last two lines to answer your question 
s1 <- 
    "2017-01-02 10:00:01 4.00 
    2017-01-02 10:00:02 3.00 
    2017-01-02 10:00:27 1.00 
    2017-01-02 10:00:56 2.00 
    2017-01-02 10:00:57 1.00" 
# I'm reading from delimiter, day and minutes come in two separates columns 
O <- read.delim(textConnection(s),header=FALSE,sep=" ",strip.white=TRUE) 
M <- read.delim(textConnection(s1),header=FALSE,sep=" ",strip.white=TRUE) 
setDT(O);setDT(M) 
setnames(O,c("time","m","price"));setnames(M,c("time","m","ask_price")) 
O[,time:=paste(time,m)];M[,time:=paste(time,m)] # paste hours and minutes 
O[,m:=NULL];M[,m:=NULL] # remove minutes 
O[,time:= lubridate::ymd_hms(time)];M[,time:= lubridate::ymd_hms(time)]# extract time 

################ 
# Analysis 
################# 
setkey(O,time); setkey(M,time) 
# this will identify all orders (O) after Market sessions (M) 
M[O, roll = T] 
#time ask_price price 
#1: 2017-01-02 10:00:02   3  5 
#2: 2017-01-02 10:00:05   3  6 
#3: 2017-01-02 10:00:13   3  5 
#4: 2017-02-02 10:00:16   1  4 
#5: 2017-02-02 10:00:24   1  2 

# this will identify all orders (O) after market session (M) 
# within a time span of 24 hours 
twenty_four_hours<-60*60*24 
res<-M[O, roll = twenty_four_hours] 
#time ask_price price 
#1: 2017-01-02 10:00:02   3  5 
#2: 2017-01-02 10:00:05   3  6 
#3: 2017-01-02 10:00:13   3  5 
#4: 2017-02-02 10:00:16  NA  4 
#5: 2017-02-02 10:00:24  NA  2 
res[!is.na(ask_price),] # now we remove lines without values 
# time ask_price price 
#1: 2017-01-02 10:00:02   3  5 
#2: 2017-01-02 10:00:05   3  6 
#3: 2017-01-02 10:00:13   3  5