2014-05-14 1 views
2

누적 수익이있는 데이터 프레임에 열을 만들려고합니다. 데이터 프레임은 여러 개의 주식을 가지며 "n"열로 표시됩니다. 데이터 프레임을 주식 수로 나눌 필요없이 이러한 주식의 누적 수익률을 계산하고 싶습니다. 이 예를 참조하십시오 :파일에 다른 주식이 포함되어있을 때 cumprod 계산

library("lubridate") 
n=c("IBM","IBM","IBM","IBM","IBM","IBM","IBM","IBM","IBM","IBM", 
    "AAPL","AAPL","AAPL","AAPL","AAPL","AAPL","AAPL","AAPL","AAPL","AAPL", 
    "GOOG","GOOG","GOOG","GOOG","GOOG","GOOG","GOOG","GOOG","GOOG","GOOG" 
    ) 

dt=c("20140407","20140408","20140409","20140410","20140411", 
    "20140414","20140415","20140416","20140417","20140418", 
    "20140407","20140408","20140409","20140410","20140411", 
    "20140414","20140415","20140416","20140417","20140418", 
    "20140407","20140408","20140409","20140410","20140411", 
    "20140414","20140415","20140416","20140417","20140418" 
    ) 
ret=c(0.006,0.049,0.069,0.068,0.062,0.035,0.001,0.048,0.034,0.025, 
    0.068,0.002,0.042,0.036,0.01,0.006,0.074,0.021,0.005,0.028, 
    0.082,0.041,0.036,0.083,0.012,0.031,0.061,0.032,0.061,0.041 
    ) 

df=data.frame(n,dt,ret) 
df$dt<-ymd(as.character(df$dt)) 
df$cum_ret <-cumprod(1+df$ret) 

이 데이터 세트에는 3 개의 주식이 있습니다. df $ cum_ret을 변경하여 각 주식 (누적 열 "n"에 표시)의 누적 수익률이되도록하십시오.

누구의 의견이 있습니까? 정말 고맙습니다!

+0

당신은 정말해야 [편집] 당신의 언어 태그를 게시하고 포함 시키십시오. 그러면 해당 언어에 익숙한 사람들이 그것을 볼 수 있습니다. "주식"은 프로그래밍 용어가 아닙니다. –

답변

0

dplyr 패키지로이 작업을 수행 할 수 있습니다.

require(dplyr)  #install the package and load it into library 

#group the data by "n" and calculate the cumulative sums of returns 

df <- df %.% group_by(n) %.% mutate(cum_ret = cumsum(ret))  

편집 : n의 그룹이 누적 수익률을 계산할 때, 당신은 작동 arrange을 포함 할 수 날짜별로 정렬되어 있는지 확인하기 :

df <- df %.% arrange(n, dt) %.% group_by(n) %.% mutate(cum_ret = cumsum(ret)) 
+0

이것은 완벽합니다, 너무 많이 beginneR !!! –

1
> s <- split(df, df$n) 
> ll <- lapply(s, function(x) cbind(x, cum_ret = cumprod(1+x$ret))) 
> unsplit(ll, df$n) 
#  n  dt ret cum_ret 
# 1 IBM 20140407 0.006 1.006000 
# 2 IBM 20140408 0.049 1.055294 
# 3 IBM 20140409 0.069 1.128109 
# ... 
# 11 AAPL 20140407 0.068 1.068000 
# 12 AAPL 20140408 0.002 1.070136 
# 13 AAPL 20140409 0.042 1.115082 
# ... 
# 21 GOOG 20140407 0.082 1.082000 
# 22 GOOG 20140408 0.041 1.126362 
# 23 GOOG 20140409 0.036 1.166911 
# ... 
+1

로그에'cumsum (r)'이 리턴됩니다. 연산에 대해'cumprod (1 + r)'을 반환합니다 – GSee

+0

고마워요! 나는 누적을 사용하여 계산하므로 1 + r * 이전 기준이 필요합니다. –

+0

코드를 코드에 연결하십시오. :) 나는 너를 위해 그것을했다. –

관련 문제