如何用R计算股票日收益率并生成含change列的data.frame
在R中计算日收益率并生成带百分比格式的数据框
问题说明
给定日收益率计算公式:
日收益率百分比/100 = (今日收盘价 - 昨日收盘价)/昨日收盘价
现有如下R数据框:
date close 1 2018-09-21 3410.486 2 2018-09-22 3310.126 3 2018-09-23 3312.482 4 2018-09-24 3269.432 5 2018-09-25 3204.922
需要计算日收益率后,生成包含change列(百分比格式)的新数据框,目标格式示例如下(注:示例中最后一行收盘价与原始数据有差异,为输入笔误,以下按逻辑处理):
date close change 1 2018-09-21 3410.486 3.03% 2 2018-09-22 3310.126 -0.07% 3 2018-09-23 3312.482 1.32% 4 2018-09-24 3269.432 2.01% 5 2018-09-25 3321.825 NA
解决方案
使用dplyr包的lag()函数获取前一日收盘价,结合公式计算收益率,再格式化为百分比字符串:
步骤1:准备数据与加载包
# 安装dplyr(首次使用需安装) # install.packages("dplyr") library(dplyr) # 原始数据 df <- data.frame( date = as.Date(c("2018-09-21", "2018-09-22", "2018-09-23", "2018-09-24", "2018-09-25")), close = c(3410.486, 3310.126, 3312.482, 3269.432, 3204.922) ) # 若需匹配目标示例中的最后一行收盘价,可修改此处 # df$close[5] <- 3321.825
步骤2:计算并格式化日收益率
df_result <- df %>% mutate( # 计算收益率数值:(今日收盘价 - 昨日收盘价)/昨日收盘价 * 100 return_value = (close - lag(close)) / lag(close) * 100, # 格式化为保留两位小数的百分比字符串,NA值保持原样 change = ifelse(is.na(return_value), NA, sprintf("%.2f%%", return_value)) ) %>% # 移除中间计算列 select(-return_value) # 查看结果 print(df_result)
步骤3:自定义第一行收益率(可选)
按公式逻辑,第一行无前置数据,change应为NA。若需匹配示例中的自定义值,可手动赋值:
df_result$change[1] <- "3.03%"
运行后得到的结果如下(以原始数据为例):
date close change 1 2018-09-21 3410.486 NA 2 2018-09-22 3310.126 -2.94% 3 2018-09-23 3312.482 0.07% 4 2018-09-24 3269.432 -1.30% 5 2018-09-25 3204.922 -1.97%
内容的提问来源于stack exchange,提问作者Stuck Need Help
相关产品推荐
相关产品推荐

