使用R中的循环计算

时间:2017-02-06 15:17:45

标签: r

我刚开始用R进行统计分析,我还在学习。我在R中创建循环有一个问题。我有以下情况,我想知道是否有人可以帮助我。对我来说似乎是不可能的,但对于你们中的一些人来说,这只是一块蛋糕。我有不同年份的不同公司的数据集。对于每家公司我都有每日股票价格数据,我需要使用以下公式计算每家公司的股票收益率= (Pt - Pt-1)/ Pt-1其中Pt是当天的股票价格,Pt-1是股票前一天的价格。 我拥有的数据集如下:

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

我希望你能帮我解决这个问题。先感谢您。

2 个答案:

答案 0 :(得分:2)

使用dplyr:

library(dplyr)
df %>%
    group_by(Firm) %>%
    mutate(Return = (Price - lag(Price)) / lag(Price))

答案 1 :(得分:0)

我认为这应该有效(我使用了这个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))