2011-10-14 3 views
4

처리하고자하는 주식 시세의 OHLC 배열이 있습니다.간단한 R 태스크 : 지정된 행을 지정된 행으로 1000으로 나누십시오.

   Open  High  Low  Close   Volume 
2003-01-05 6111.01 6145.00 6102.70 6145.00   956 
2003-01-08 6145.00 6190.00 5960.00 6135.05  8771 
2003-01-09 6120.01 6250.00 6120.00 6225.00  10579 
2003-01-10 6240.00 6285.00 6225.10 6261.00  8882 
2003-01-13 6231.00 6325.00 6231.00 6270.00  8015 
2003-01-14 6279.00 6295.00 6180.01 6190.00  8461 

이 회사는 주어진 날짜 @ 분할을했다, 그래서 내가 R의 기초를 배우고으로 지금은 좋은 파악하고자 1000 에 의해 해당 날짜 이전 열려, 고가, 저가, 가까운 열을 분할해야 R 솔루션을 사용하십시오. 내가 코드를 관리했습니다 코드의 가장 좋은 부분입니다 (캔트 주어진 COLS에 적용하는 방법을 알아 보려면, 주식 $ 열기가 작동하지 않습니다) :

apply(stock, 2, function(stock) stock/((index(stock)<"2007-07-20")*1000)) 

그러나, 결과는, 그들 중 많은 이상한 있습니다 :

2006-10-26  Inf  Inf  Inf  Inf   Inf 
2006-10-27  Inf  Inf  Inf  Inf   Inf 
2006-10-30  Inf  Inf  Inf  Inf   Inf 
2006-10-31  Inf  Inf  Inf  Inf   Inf 
2006-11-01  Inf  Inf  Inf  Inf   Inf 
2006-11-02  Inf  Inf  Inf  Inf   Inf 
2006-11-03  Inf  Inf  Inf  Inf   Inf 
2006-11-07  Inf  Inf  Inf  Inf   Inf 

미리 감사드립니다.

+0

도움을 주신 모든 분들께 감사드립니다. 게시 후 20 분이 지나면 내 문제가 해결되었습니다. –

답변

2

나는 OHLC array들에 익숙하지하지만,이 인덱스 방법을 가정하고 작동합니다

당신이 실제로합니다 (도 마찬가지 논리 벡터를 모든 관련 행을 들고 벡터를했으면
relevantRows<-index(stock) < "2007-07-20" 

stock$Open[relevantRows]<-stock$Open[relevantRows]/1000 

그것은() OHLC array S의 내부에 따라 가능하며, 심지어이 작동 : 변경해야 행), 당신은 아마 간단하게 다음과 같이 이것을 사용할 수 있습니다

+1

감사합니다 @ 닉, 귀하의 솔루션이 내 요구 사항에 꼭 맞습니다! 너는 나에게 몇 시간을 구해 주었다. 너 한테 맥주 빚 졌어. 감사!!! R은 아름다운 언어이지만 때로는 조언없이 발전하기가 어렵습니다. –

+0

거기 조심해, 너는 방금 벨기에에게 맥주 빚을 진다고 말했다. 그러나 진지하게 : [R 소개] (http://cran.r-project.org/doc/manuals/R-intro.pdf)에서 약간의 시간을 보내십시오. 제 대답에 사용 된 모든 원칙이 그 문서에 있습니다. 나는 그것이 옳은 길에서 나에게 많은 것을주고, 더 진보 된 재료를 준비한다는 것을 안다! –

+0

다시 한번 감사드립니다. @ 닉,이 가이드를 반드시 읽으겠습니다. 그리고 날짜 필터를 지정하는 또 하나의 좋은 방법을 찾았습니다. 어쩌면 모든 곳에 적용 할 수는 없지만 내 경우에는 작동합니다. (xts 객체)'stock [[2007-07-19 ", c ("Open ","High ","Low ","Close ")] [ ":: 2007-07-19", c ("Open", "High", "Low", "Close")]/splitRatio' –

2

날짜가 2007 년 20 월 7 일 이전이 아닌 경우 (index(stock)<"2007-07-20")FALSE이고 따라서 (index(stock)<"2007-07-20")*1000은 0으로 표시됩니다. Inf 값은 0으로 나눈 값입니다.

이 작업을 시도 할 수 :

stock[index(stock) < "2007-07-20", -5] <- stock[index(stock) < "2007-07-20", -5]/1000 
+0

바보 같은 실수로 나를 지적 해 주신 고마워요. 0으로 나누십시오 : -0 –

1

당신은이 작업을 수행 할 TTR 패키지의 adjRatios 기능을 사용할 수 있습니다. 야후 금융에서 데이터를 사용하는 경우, 당신은 자동으로부터 분할 및 배당 데이터를 끌어 quantmod에 adjustOHLC 기능을 사용할 수 있습니다

library(quantmod) 
x <- structure(c(6111.01, 6145, 6120.01, 6240, 6231, 6279, 6145, 6190, 
6250, 6285, 6325, 6295, 6102.7, 5960, 6120, 6225.1, 6231, 6180.01, 
6145, 6135.05, 6225, 6261, 6270, 6190, 956, 8771, 10579, 8882, 
8015, 8461), .Dim = c(6L, 5L), .Dimnames = list(NULL, c("Open", 
"High", "Low", "Close", "Volume")), index = structure(c(1041746400, 
1042005600, 1042092000, 1042178400, 1042437600, 1042524000), tzone = "", 
tclass = "Date"), class = c("xts", "zoo"), .indexCLASS = "Date", .indexTZ = "") 
s <- xts(1/1000,as.Date("2003-01-10")) 
r <- adjRatios(s,,Cl(x)) 
OHLC(x) * drop(r[,"Split"]) * drop(r[,"Div"]) 

: 이미 XTS 객체를 가지고있는 것처럼 그 그래서 내가 무엇을 사용 보인다 야후와 시리즈 조정. 더 많은 옵션은 ?adjustOHLC을 참조하십시오.

+0

Joshua, 러시아 주식 공급 업체 finam의 데이터.ru, 나는 rusquant를 사용하고 있습니다. 그것은 러시아 주식 데이터를 가져 오기위한 quantmod 기반의 lib입니다. 나 또한 야후 데이터로 놀고, adjustOHLC 기능을 확인하고, 나를 위해 흥미로운 것 같습니다. 감사. –

관련 문제