用R中的loop进行计算

用R中的loop进行计算,r,R,我刚开始使用R进行统计分析,我还在学习。我在R中创建循环时遇到了一个问题。我遇到了以下情况,我想知道是否有人可以帮助我。对我来说这似乎是不可能的,但对你们中的一些人来说这只是小菜一碟。我有不同年份不同公司的数据集。对于每个公司,我有每日股价数据,我需要使用以下等式计算每个公司每天的股票回报率=(Pt-Pt-1)/Pt-1,其中Pt是当天的股价,Pt-1是前一天的股价。 我拥有的数据集如下所示: Date Firm Price 1/1/2009 A 2 2/

我刚开始使用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
我希望你能在这个问题上帮助我。先谢谢你

使用dplyr:

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

library(dplyr)
df %>%
    group_by(Firm) %>%
    mutate(Return = (Price - lag(Price)) / lag(Price))
我认为这应该行得通(我用过这个):

#定义计算百分比变化的函数
myFun我认为这应该有效(我用过这个):

#定义计算百分比变化的函数

myFun您还需要(公司)
@Sotos和@GGamba对您的帮助表示感谢,但我在安装package
dplyr
时遇到问题。我从R收到此消息:
安装中出现警告。软件包:软件包“dplyr”不可用(适用于R版本3.1.1)
。我不知道该怎么做才能在这里为您找到问题的答案:您还需要
group_by(Firm)
@Sotos和@GGamba感谢您的帮助,但我在安装package
dplyr
时遇到问题。我从R收到此消息:
安装中出现警告。软件包:软件包“dplyr”不可用(适用于R版本3.1.1)
。我不知道该怎么做才能在这里为你们找到问题的答案:Related-Related-谢谢@staove7对你们的帮助。代码运行得很好。我还需要参考@Sotos的另一个答案:谢谢@staove7对您的帮助。代码运行得很好。我还需要参考@Sotos的另一个答案: