计算数据帧的一行,另一行用于计算 R 中的 returns
Calculation on one row of a Data Frame with the other row for calculating returns in R
我有以下一组样本数据,其中有很多行和列。我正在尝试计算每月 returns。我过去曾使用 excel 完成过此操作,但找不到解决方案。
RETURNS = (THIS_MONTH_PRICE/PREVIOUS_MONTH_PRICE) - 1
DF1 =
日期价格库存<br>
1 2011 年 1 月 31 日 339.32 AAPL
2 2011 年 2 月 28 日 353.21 AAPL
3 2011 年 3 月 31 日 348.45 苹果
4 2011 年 4 月 29 日 348.23 苹果
5 2011 年 5 月 31 日 347.83 苹果
6 2011 年 6 月 30 日 335.67 苹果
7 2011 年 7 月 29 日 390.48 苹果
8 2011 年 8 月 31 日 384.83 苹果
输出:
DF2=
日期价格股票 RETURNS<br>
1 1/31/2011 339.32 AAPL NA
2 2011 年 2 月 28 日 353.21 AAPL 0.040934811
3 2011 年 3 月 31 日 348.45 AAPL 0.040934811
4 2011 年 4 月 29 日 348.23 AAPL 0.040934811
5 2011 年 5 月 31 日 347.83 AAPL 0.040934811
6 2011 年 6 月 30 日 335.67 AAPL 0.040934811
7 2011 年 7 月 29 日 390.48 AAPL 0.16328537
8 2011 年 8 月 31 日 384.83 AAPL -0.014469371
谁能帮我解决这个问题。谢谢
我们可以使用 dplyr 包中的 lag
函数。
library(dplyr)
df2 <- df1 %>% mutate(RETURNS = Price/lag(Price) - 1)
df2
# Date Price Stock RETURNS
# 1 1/31/2011 339.32 AAPL NA
# 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 <- 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)
如果您对仅使用基础 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
我有以下一组样本数据,其中有很多行和列。我正在尝试计算每月 returns。我过去曾使用 excel 完成过此操作,但找不到解决方案。
RETURNS = (THIS_MONTH_PRICE/PREVIOUS_MONTH_PRICE) - 1
DF1 =
日期价格库存<br>
1 2011 年 1 月 31 日 339.32 AAPL
2 2011 年 2 月 28 日 353.21 AAPL
3 2011 年 3 月 31 日 348.45 苹果
4 2011 年 4 月 29 日 348.23 苹果
5 2011 年 5 月 31 日 347.83 苹果
6 2011 年 6 月 30 日 335.67 苹果
7 2011 年 7 月 29 日 390.48 苹果
8 2011 年 8 月 31 日 384.83 苹果
输出:
DF2=
日期价格股票 RETURNS<br>
1 1/31/2011 339.32 AAPL NA
2 2011 年 2 月 28 日 353.21 AAPL 0.040934811
3 2011 年 3 月 31 日 348.45 AAPL 0.040934811
4 2011 年 4 月 29 日 348.23 AAPL 0.040934811
5 2011 年 5 月 31 日 347.83 AAPL 0.040934811
6 2011 年 6 月 30 日 335.67 AAPL 0.040934811
7 2011 年 7 月 29 日 390.48 AAPL 0.16328537
8 2011 年 8 月 31 日 384.83 AAPL -0.014469371
谁能帮我解决这个问题。谢谢
我们可以使用 dplyr 包中的 lag
函数。
library(dplyr)
df2 <- df1 %>% mutate(RETURNS = Price/lag(Price) - 1)
df2
# Date Price Stock RETURNS
# 1 1/31/2011 339.32 AAPL NA
# 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 <- 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)
如果您对仅使用基础 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