2014-04-18 2 views
0

보안 DB를 쿼리하고 있습니다. 가격 시리즈는 xts 단위이며, 일부 모델에서는 선택한 창에 대한 데이터가 없을 수 있습니다. 실제 시계열은 다음과 같이 시뮬레이션 할 수 있습니다.증권이 데이터를 표시하지 않을 때 xts 단위의 합병 가격 시계열

어떤 보안이 데이터를 표시하지 않을지 미리 알 필요가 없습니다. 따라서 유사한 출력을 인쇄, 내가 그들의 추적을 유지하려는 대신

(port=merge(tick1, tick2, tick3)) 
#   tick1 tick2 
# 2014-04-20 5.829 6.458 
# 2014-04-21 6.061 5.373 
# 2014-04-22 5.813 NA 

: 나는 하나의 XTS 객체의 가격을 병합하는 경우

, merge.xts 완전히 출력에서 ​​빈 보안 (들)를 제거 로 :

(cbind(port, tick3=NA)) 
#   tick1 tick2 tick3 
# 2014-04-20 5.829 6.458 NA 
# 2014-04-21 6.061 5.373 NA 
# 2014-04-22 5.813 NA NA 

한 가지 가능한 솔루션입니다 :

port=list(tick1, tick2, tick3) # ... tickn 
port.m=lapply(port, function(sec){ 
    if(nrow(sec)==0) sec= xts(matrix(NA, dimnames=dimnames(tick3)), Sys.Date()) 
    sec 
}) 
(port.m=do.call('merge', port.m)) 
#   tick1 tick2 tick3 
# 2014-04-19 NA NA NA 
# 2014-04-20 5.829 6.458 NA 
# 2014-04-21 6.061 5.373 NA 
# 2014-04-22 5.813 NA NA 
if(all(is.na(port.m[Sys.Date()]))) 
    (port.m=port.m[time(port.m)!=Sys.Date()]) 
#   tick1 tick2 tick3 
# 2014-04-20 5.829 6.458 NA 
# 2014-04-21 6.061 5.373 NA 
# 2014-04-22 5.813 NA NA 

더 똑똑한 솔루션을 찾을 수 있습니까?

+0

'merge.xts'는 "빈 증권을 제거하지 않습니다". 'tick3'은 단지 누락 된 데이터가 아닙니다. 길이가 0 인 색인이 있으므로 병합 할 것이 없습니다. "일부 날짜의 데이터가 누락되었습니다."는 "나는 날짜가 없습니다"와 다릅니다. 이것은 또한'merge.zoo'와 일치합니다. 간단히 말해서 : if (nrow (sec) == 0) sec = NA'? –

답변

1

여기서 두 가지 실수를 저지르고 있습니다. 첫 번째 : 길이가 0이 아닌 벡터를 사용해야합니다. 참조 :

length(integer()) 
length(NA) 

둘째 : 병합 작업을하려면 xts 개체 인덱스가 어느 부분과 일치해야합니다.

이런 식으로 작동합니다 :

require(xts) 
x=xts(1:4, Sys.Date()+1:4) 
v=xts(NA, Sys.Date()+1) 
(m=merge.xts(x,v)) 

여기서 시작 색인이 일치하고 나머지 색인이 채워집니다. 당신은 매우 특별한 싶은 경우

, 당신은 아마 이런 식으로 뭔가를 시도 할 수 :

v=xts(rep(NA,4), Sys.Date()+1:4) 

희망이 도움이!

+0

+1하지만 작은 수정 : _do는 중복되지 않아야합니다. 예 :'merge (x = .xts (1,1), y = .xts (1,2))'. –

+0

귀하의 답변은 주제와 다릅니다. 필자가 쓴 것처럼이 데이터를 가지고 작업해야합니다. 나는 공급자 (교환)에게 내 필요에 맞게 그런 것을 할 수는 없다. void xts 객체에 'NA'가 있으면 여기에 게시하지 않았을 것입니다. BTW, "마케팅"이라는 이유로 재정상의 질문을 다시 말하면서 (더 많은 고객을 끌어 들이기 위해) 지루하고 그러나 일하는 * 솔루션을 제공합니다. – antonio

+1

야 ... 너 원래의 질문을 완전히 편집했다. 나는 원래의 질문에 답하고 있었다. 당신이 지금 가지고있는 것은 아닙니다 !! 어쨌든 ... 최선의 결과! – Shambho