You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:00:47