计算数据框中的一行,另一行用于计算R中的收益

计算数据框中的一行,另一行用于计算R中的收益,r,dataframe,lapply,finance,calculation,dplyr,R,Dataframe,Lapply,Finance,Calculation,Dplyr,我有以下一组示例数据,其中有许多行和列。我正在试着计算每月的回报。我以前用excel做过,但找不到解决方法 返回=(本月价格/上个月价格)-1 DF1= 日期价格股票 2011年1月31日339.32 AAPL 2011年2月28日353.21 AAPL 2011年3月31日348.45 AAPL 2011年4月29日348.23 AAPL 2011年5月31日347.83 AAPL 2011年6月30日335.67 AAPL 2011年7月29日390.48 AAPL 2011年8月31日3

我有以下一组示例数据,其中有许多行和列。我正在试着计算每月的回报。我以前用excel做过,但找不到解决方法

返回=(本月价格/上个月价格)-1

DF1=

日期价格股票
2011年1月31日339.32 AAPL 2011年2月28日353.21 AAPL 2011年3月31日348.45 AAPL 2011年4月29日348.23 AAPL 2011年5月31日347.83 AAPL 2011年6月30日335.67 AAPL 2011年7月29日390.48 AAPL 2011年8月31日384.83 AAPL
输出:

DF2=

日期价格股票收益率
2011年1月31日339.32 AAPL NA 2011年2月28日353.21 AAPL 0.040934811 2011年3月31日348.45 AAPL 0.040934811 2011年4月29日348.23 AAPL 0.040934811 2011年5月31日347.83 AAPL 0.040934811 2011年6月30日335.67 AAPL 0.040934811 2011年7月29日390.48 AAPL 0.16328537 2011年8月31日384.83 AAPL-0.014469371


有人能帮我解决这个问题吗。谢谢。

我们可以使用软件包中的
lag
功能

库(dplyr)
df2%变异(返回=价格/滞后(价格)-1)
df2
#日期价格股票回报
#2011年1月31日339.32 AAPL NA
#2011年2月28日353.21 AAPL 0.0409348108
#2011年3月31日348.45 AAPL-0.0134764021
#2011年4月29日348.23 AAPL-0.0006313675
#2011年5月31日347.83 AAPL-0.0011486661
#2011年6月30日335.67 AAPL-0.0349596067
#2011年7月29日390.48 AAPL 0.1632853696
#2011年8月31日384.83 AAPL-0.0144693710
数据

df1 <- read.table(text = "           Date Price   Stock
                  1   '1/31/2011'   339.32  AAPL
                  2   '2/28/2011'   353.21  AAPL
                  3   '3/31/2011'   348.45  AAPL
                  4   '4/29/2011'   348.23  AAPL
                  5   '5/31/2011'   347.83  AAPL
                  6   '6/30/2011'   335.67  AAPL
                  7   '7/29/2011'   390.48  AAPL
                  8   '8/31/2011'   384.83  AAPL",
                  header = TRUE, stringsAsFactors = FALSE)

df1我们可以使用包中的
lag
函数

库(dplyr)
df2%变异(返回=价格/滞后(价格)-1)
df2
#日期价格股票回报
#2011年1月31日339.32 AAPL NA
#2011年2月28日353.21 AAPL 0.0409348108
#2011年3月31日348.45 AAPL-0.0134764021
#2011年4月29日348.23 AAPL-0.0006313675
#2011年5月31日347.83 AAPL-0.0011486661
#2011年6月30日335.67 AAPL-0.0349596067
#2011年7月29日390.48 AAPL 0.1632853696
#2011年8月31日384.83 AAPL-0.0144693710
数据

df1 <- read.table(text = "           Date Price   Stock
                  1   '1/31/2011'   339.32  AAPL
                  2   '2/28/2011'   353.21  AAPL
                  3   '3/31/2011'   348.45  AAPL
                  4   '4/29/2011'   348.23  AAPL
                  5   '5/31/2011'   347.83  AAPL
                  6   '6/30/2011'   335.67  AAPL
                  7   '7/29/2011'   390.48  AAPL
                  8   '8/31/2011'   384.83  AAPL",
                  header = TRUE, stringsAsFactors = FALSE)

df1如果您对仅使用base R的解决方案感兴趣:

> DF1$RETURNS <- (df$Price / c(0, head(df$Price, -1))) - 1
> DF1
       Date  Price Stock       RETURNS
1 1/31/2011 339.32  AAPL           Inf
2 2/28/2011 353.21  AAPL  0.0409348108
3 3/31/2011 348.45  AAPL -0.0134764021
4 4/29/2011 348.23  AAPL -0.0006313675
5 5/31/2011 347.83  AAPL -0.0011486661
6 6/30/2011 335.67  AAPL -0.0349596067
7 7/29/2011 390.48  AAPL  0.1632853696
8 8/31/2011 384.83  AAPL -0.0144693710
>DF1$返回DF1
日期价格股票回报
2011年1月31日339.32 AAPL Inf
2011年2月28日353.21 AAPL 0.0409348108
2011年3月31日348.45 AAPL-0.0134764021
2011年4月29日348.23 AAPL-0.0006313675
2011年5月31日347.83 AAPL-0.0011486661
2011年6月30日335.67 AAPL-0.0349596067
2011年7月29日390.48 AAPL 0.1632853696
2011年8月31日384.83 AAPL-0.0144693710

如果您对仅使用base R的解决方案感兴趣:

> DF1$RETURNS <- (df$Price / c(0, head(df$Price, -1))) - 1
> DF1
       Date  Price Stock       RETURNS
1 1/31/2011 339.32  AAPL           Inf
2 2/28/2011 353.21  AAPL  0.0409348108
3 3/31/2011 348.45  AAPL -0.0134764021
4 4/29/2011 348.23  AAPL -0.0006313675
5 5/31/2011 347.83  AAPL -0.0011486661
6 6/30/2011 335.67  AAPL -0.0349596067
7 7/29/2011 390.48  AAPL  0.1632853696
8 8/31/2011 384.83  AAPL -0.0144693710
>DF1$返回DF1
日期价格股票回报
2011年1月31日339.32 AAPL Inf
2011年2月28日353.21 AAPL 0.0409348108
2011年3月31日348.45 AAPL-0.0134764021
2011年4月29日348.23 AAPL-0.0006313675
2011年5月31日347.83 AAPL-0.0011486661
2011年6月30日335.67 AAPL-0.0349596067
2011年7月29日390.48 AAPL 0.1632853696
2011年8月31日384.83 AAPL-0.0144693710

我觉得您的输出很奇怪。为什么你得到了很多
0.040934811
?我觉得你的输出很奇怪。为什么你得到了很多
0.040934811