2013-07-21 2 views
3
data<- c(100,101,102,103,104,99,98,97,94,93,103,90,104,105,110) 
date<- Sys.Date()-15:1 
file<- xts(data,date) 
colnames(file)<- "CLOSE" 
file$high<- cummax(file$CLOSE) 
file$trade <- 0 
file$trade[file$high*.95>=file$CLOSE] <- 1 
file$trade[file$high*.90>=file$CLOSE] <- 2 
file$trade[file$high*.85>=file$CLOSE] <- 3 

file 
     CLOSE high trade 
2013-07-06 100 100  0 
2013-07-07 101 101  0 
2013-07-08 102 102  0 
2013-07-09 103 103  0 
2013-07-10 104 104  0 
2013-07-11 99 104  0 
2013-07-12 98 104  1 
2013-07-13 97 104  1 
2013-07-14 94 104  1 
2013-07-15 93 104  2 
2013-07-16 103 104  0 
2013-07-17 90 104  2 
2013-07-18 104 104  0 
2013-07-19 105 105  0 
2013-07-20 110 110  0 

나는 첫 번째 "1"을 얻은 후에 2를 얻고 모든 요소가 0이 될 때까지 모든 요소가 0이 될 때까지 나는 3 등을 얻는다.한 번만 열이있는 루프 반복

답변

2

난 당신이 간단하게 할 수있는 생각 :

> file$trade[duplicated(file$trade)] <- 0 
+0

무엇 나는 [파일 높은 $ * 0.90> = 파일 $ CLOSE] <파일 $ 무역을해야하는 경우 - 즉, 모든 5도 1, 높은 칼럼 아래 (%) 칼로리가 필요합니다. –

2

루프를 수행 할 필요가 없습니다. 사실, 첫 번째 "1", "2"...의 위치를 ​​찾아야합니다. 다음 코드를 사용해보십시오.

rank.trade <- rank(file$trade, ties.method = "first") 
marks <- cumsum(head(table(file$trade), -1)) + 1 
black.list <- is.na(match(rank.trade, marks)) 
file$trade[black.list] <- 0