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