我刚开始用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
我希望你能帮我解决这个问题。先感谢您。
答案 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))