2017-02-06 2 views
0

통계 분석을 위해 R을 사용하기 시작했으며 아직 배우고 있습니다. R에서 루프를 만드는 데 문제가 있습니다. 다음과 같은 경우가 있습니다. 누구든지 나를 도와 줄 수 있는지 궁금합니다. 나에게는 그것은 불가능한 것처럼 보이지만, 여러분 중 일부는 단지 케이크 조각 일뿐입니다. 나는 다른 해에 걸쳐 다른 회사에 대한 데이터 세트를 가지고 있습니다. 각 기업에 대해 나는 일일 주가 데이터를 가지고 있으며 다음 방정식 = (Pt - Pt-1)/ Pt-1을 사용하여 매일 각 기업의 주식 수익을 계산해야합니다. 여기서 Pt는 당일의 주가이고 Pt-1은 이전 주가 일. 내가 가지고있는 데이터 세트는 다음과 같다 : 내가 필요R을 루프를 사용하여 계산

Date  Firm Price 
1/1/2009 A  2  
2/1/2009 A  2.5 
3/1/2009 A  5 
4/1/2009 A  4 
1/1/2010 A  1.5 
2/1/2010 A  1.8 
3/1/2010 A  6 
4/1/2010 A  7 
1/1/2009 B  16  
2/1/2009 B  15 
3/1/2009 B  10 
4/1/2010 B  11 
1/1/2010 B  20 
2/1/2010 B  13 
3/1/2010 A  12 
4/1/2010 A  10 

결과는 당신이 문제를 도와 줄 수 있기를 바랍니다 다음

Date  Firm Price Return 
1/1/2009 A  2  NA 
2/1/2009 A  2.5 0.25 
3/1/2009 A  5  1 
4/1/2009 A  4  -0.2 
1/1/2010 A  1.5 -0.625 
2/1/2010 A  1.8 0.2 
3/1/2010 A  6  2.33333 
4/1/2010 A  7  0.166667 
1/1/2009 B  16  NA 
2/1/2009 B  15  -0.0625 
3/1/2009 B  10  -0.3333 
4/1/2010 B  11  0.1 
1/1/2010 B  20  0.81818 
2/1/2010 B  13  -0.35 
3/1/2010 A  12  -0.07692 
4/1/2010 A  10  -166667 

같다. 미리 감사드립니다. dplyr와

+0

관련을 - http://stackoverflow.com/questions/42049356/difference-between- 2 행으로 나누어서 이전 행/42049872 # 42049872 – Sotos

답변

0

(I이 Calculating %changes with the By() 사용) :

# defining a function which calculates percent change 

myFun <- function(x){ 
n <- nrow(x) 
x$Change <- c(NA,diff(x$Price)/head(x$Price,n-1)) 
x 
} 

# applying it over the data frame by `Firm` type 

do.call(rbind,by(df,df$Firm,FUN=myFun)) 
+0

도와 주셔서 감사합니다 @ staove7. 코드가 완벽하게 작동했습니다. –

+0

또한 @Sotos의 다른 답변을 참조해야합니다. https://stackoverflow.com/questions/42049356/difference-between-two-rows-divided-by-the-previous-row/42049872#42049872 –

2

가 :

나는이 일을해야한다고 생각
library(dplyr) 
df %>% 
    group_by(Firm) %>% 
    mutate(Return = (Price - lag(Price))/lag(Price)) 
+3

당신은 또한'group_by (Firm)' – Sotos

+0

이 필요합니다. 내 대답을 – GGamba

+0

업데이트했습니다 @Sotos와 @GGamba 당신의 도움에 감사드립니다. 'dplyr' 패키지 설치시 문제가 있습니다. R :'Warning in install.packages : 'dplyr'패키지를 사용할 수 없습니다 (R 버전 3.1.1). '라는 메시지가 나타납니다. 나는 무엇을 해야할지 모르겠다 –

관련 문제