2016-08-16 2 views
0

일일 및 주간 데이터를 연속적으로 바인딩하고 싶습니다 (NA 없음).이 코드를이 용도로 사용하고 있지만 두 가지 문제점이 있습니다.계속되는 매일 및 주간 데이터를 R?

library(quantmod) 
aapl=getSymbols("AAPL",from="2015-01-01",auto.assign=F) 
d_aapl=Cl(aapl)/Op(aapl) 
head(d_aapl) 
w_aapl=to.weekly(d_aapl) 

head(w_aapl) 
res=cbind(d_aapl,Cl(w_aapl)) 
head(res,8) 

첫 번째 문제는 논리적으로 만 전용 d_aapl하지만 가변 체적을 제외한 모든 열로 수행하고 조정에 근접 to.weekly 기능을 수행한다 w_aapl=to.weekly(d_aapl)으로한다. 여기서 무슨 일이 일어나고있는거야?

  d_aapl.Open d_aapl.High d_aapl.Low d_aapl.Close 
2015-01-02 0.9815064 0.9815064 0.9815064 0.9815064 
2015-01-09 0.9811617 1.0243522 0.9811617 0.9941422 
2015-01-16 0.9702487 1.0069699 0.9702487 0.9902831 
2015-01-23 1.0081603 1.0194087 1.0055072 1.0060552 
2015-01-30 0.9943731 1.0221802 0.9708237 0.9895270 
2015-02-06 1.0049131 1.0089451 0.9909182 0.9909182 

번째 문제는 출력 res으로한다. 열 후 나는 일의 일부는 NA로 채워집니다 대신 NA의 내가 이전 데이터

curren result 
      AAPL.Close d_aapl.Close 
2015-01-02 0.9815064 0.9815064 
2015-01-05 0.9811617   NA 
2015-01-06 0.9973719   NA 
2015-01-07 1.0051306   NA 
2015-01-08 1.0243522   NA 
2015-01-09 0.9941422 0.9941422 
2015-01-12 0.9702487   NA 
2015-01-13 0.9891412   NA 

wanted 

      AAPL.Close d_aapl.Close 
2015-01-02 0.9815064 0.9815064 
2015-01-05 0.9811617 0.9815064 
2015-01-06 0.9973719 0.9815064 
2015-01-07 1.0051306 0.9815064 
2015-01-08 1.0243522 0.9815064 
2015-01-09 0.9941422 0.9941422 
2015-01-12 0.9702487 0.9941422 
2015-01-13 0.9891412 0.9941422 

어떻게 할

을 사용할 것으로 예상 바인딩?

+2

사용'동물원 :: na.locf을()'또는'tidyr :: fill()'을 사용하십시오. – Psidom

+1

첫 번째 문제에 대한 OHLC 인수를 설정하십시오 :'to.weekly (d_aapl, OHLC = FALSE)'. '? to.weekly'을 참조하십시오. –

답변

1

당신이 무슨 일이 일어나고 있는지 질문하는 첫 번째 문제에 대한 실제 대답 : w_aapl=to.weekly(d_aapl) 단순히 당신의 매일 d_aapl 시계열의 OHLC를 (반환 univariate series)을 주 단위로 표시하지만, 주간 데이터의 처음 몇 행 (그리고 마지막 몇 행)은 그렇게 명확하지 않을 수 있습니다. (이 질문의 맥락에서 조정 된 가격이나 볼륨이있는 아무 상관이 없습니다.) w_aapl에서

타임 스탬프는 당신이 원하는 경우 (약 ?to.periodindexAt 인수를 읽을 기본적으로 각 주간 집계에서 사용 가능한 마지막 날에 해당 타임 스탬프를주의 시작으로 변경하십시오. 그러나 이것은 질문에 대답하는 측면 포인트입니다. 매주 월요일부터 일요일까지 실행됩니다 (월요일의 데이터는 다음 주 첫날 임).

주말에 데이터가 없기 때문에 타임 스탬프는 매주 마지막 금요일이됩니다 (일요일 데이터가 포함 된 경우 일요일이됩니다). 어쩌면이 무엇을보고 도움이 될 것이 벌어지고 : 데이터에 대한 구체적

class(coredata(d_aapl)) <- "character" 
v <- xts(order.by = index(d_aapl), x = weekdays(index(d_aapl)), dimnames = list(NULL, "Weekday")) 
head(merge(d_aapl, v), 20) 

#    AAPL.Close   Weekday  
# 2015-01-02 "0.981506445654964" "Friday" 
# 2015-01-05 "0.981161686386908" "Monday" 
# 2015-01-06 "0.997371888517253" "Tuesday" 
# 2015-01-07 "1.00513062514358" "Wednesday" 
# 2015-01-08 "1.02435224688221" "Thursday" 
# 2015-01-09 "0.994142220540378" "Friday" 
# 2015-01-12 "0.970248685084346" "Monday" 
# 2015-01-13 "0.989141173831105" "Tuesday" 
# 2015-01-14 "1.00696993757364" "Wednesday" 
# 2015-01-15 "0.971090909090909" "Thursday" 
# 2015-01-16 "0.990283088762806" "Friday" 
# 2015-01-20 "1.00816028405639" "Tuesday" 
# 2015-01-21 "1.00550716857753" "Wednesday" 
# 2015-01-22 "1.01940867006333" "Thursday" 
# 2015-01-23 "1.00605520909915" "Friday" 
# 2015-01-26 "0.994373131604943" "Monday" 
# 2015-01-27 "0.97082370522725" "Tuesday" 
# 2015-01-28 "0.980277148183554" "Wednesday" 
# 2015-01-29 "1.02218020976616" "Thursday" 
# 2015-01-30 "0.989527044095827" "Friday" 

, 월요일부터 금요일까지 데이터를 가지고 가고, 금요일 타임 스탬프를 할당 할 각 행 :

  • 첫 번째 주간 데이터를 항목 2015-01-02은 (A 월요일) ~ 2015-01-04 (A 일요일) 사이의 값을 취하며 금요일의 값은 2015-01-02입니다. 따라서 첫 번째 주간 막대의 OHLC = C입니다.
  • 2015-01-09 행의 데이터는 2015-01-05에서 2015-01-11 사이의 d_aapl에서 가져온 것입니다. 너는 높이가 2015-01-08에서 명확하게 볼 수 있고, 낮게는 2015-01-05에 있고, 열리는 것은 2015-01-05 인 범위의 첫 번째 값이고, 닫는 값은 2015-01-09이다.
  • 2015-01-16에 대한 데이터는 d_aapl에서 2015-01-12에서 2015-01-18 사이에 취해집니다.두 번째 질문에 대해서는

, 다른 답변은 이미 잘 작동을 제공하지만, 당신은 또한 ?merge.xts 및 특정 상황에서 더 간결의 fill 인수,보고 고려해 볼 수 있습니다 : res=merge(d_aapl,Cl(w_aapl), fill = na.locf)

1

그냥 다음 줄을 추가합니다 :

res$d_aapl.Close <- na.locf(res$d_aapl.Close) 

> res 
      AAPL.Close d_aapl.Close 
2015-01-02 0.9815064 0.9815064 
2015-01-05 0.9811617 0.9815064 
2015-01-06 0.9973719 0.9815064 
2015-01-07 1.0051306 0.9815064 
2015-01-08 1.0243522 0.9815064 
2015-01-09 0.9941422 0.9941422 
2015-01-12 0.9702487 0.9941422 
2015-01-13 0.9891412 0.9891412 
관련 문제