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

如何在R中配置初始投资的累积股息再投资

股息再投资的股票总价值计算(R语言实现)

步骤1:加载依赖包与获取数据

首先加载tidyverse工具包,调用提供的D_NVDY_Pull()函数获取Yahoo Finance月度数据,并确保数据按日期排序(避免计算顺序出错):

library(tidyverse)

# 获取数据
df <- D_NVDY_Pull()
# 按日期升序排列
df <- df %>% arrange(Date)

步骤2:定义初始参数

设定初始投资金额与对应初始股票数量:

initial_investment <- 1000
# 按第一期平均股价计算初始股票数,或直接用示例值44.4
initial_shares <- initial_investment / first(df$Avg_Price)
# initial_shares <- 44.4 # 直接使用示例值时取消注释

步骤3:递推计算股息再投资相关列

由于New Shares、Cumulative New Shares等列存在行间依赖(当期值依赖上期累积结果),直接用mutate+lag无法完成完整递推,以下提供两种实现方式:

方式一:for循环(直观易理解)

# 初始化空列存储计算结果
df$New_Shares <- 0
df$Cumulative_New_Shares <- 0
df$Total_Shares <- 0
df$Total_Value <- 0

# 第一期初始化
df$Total_Shares[1] <- initial_shares
df$Total_Value[1] <- initial_shares * df$Avg_Price[1]

# 从第二期开始递推计算
for (i in 2:nrow(df)) {
  # 当期新增股票数 = 上期总股票数 * 当期股息 / 当期平均股价
  df$New_Shares[i] <- df$Total_Shares[i-1] * df$Dividends[i] / df$Avg_Price[i]
  # 累积新增股票数 = 上期累积值 + 当期新增值
  df$Cumulative_New_Shares[i] <- df$Cumulative_New_Shares[i-1] + df$New_Shares[i]
  # 总股票数 = 初始数 + 累积新增数
  df$Total_Shares[i] <- initial_shares + df$Cumulative_New_Shares[i]
  # 总价值 = 总股票数 * 当期平均股价
  df$Total_Value[i] <- df$Total_Shares[i] * df$Avg_Price[i]
}

方式二:purrr::accumulate(函数式编程,更简洁)

利用accumulate函数传递每一期的总股票数状态,避免显式循环:

# 定义递推函数:输入上期总股票数,返回当期总股票数
update_shares <- function(prev_total, current_row) {
  new_shares <- prev_total * current_row$Dividends / current_row$Avg_Price
  prev_total + new_shares
}

# 计算每一期的总股票数
df$Total_Shares <- accumulate(
  .x = df[-1, ], # 从第二期开始迭代
  .f = update_shares,
  .init = initial_shares # 初始股票数作为初始状态
)

# 基于总股票数计算其他列
df <- df %>%
  mutate(
    # 新增股票数 = 当期总股票数 - 上期总股票数
    New_Shares = Total_Shares - lag(Total_Shares, default = initial_shares),
    # 累积新增股票数 = 总股票数 - 初始股票数
    Cumulative_New_Shares = Total_Shares - initial_shares,
    # 总价值 = 总股票数 * 当期平均股价
    Total_Value = Total_Shares * Avg_Price
  )

关键说明

  • 必须确保数据按Date升序排列,否则递推逻辑会出错。
  • 若Dividends列包含0(无股息月份),代码会自动处理(新增股票数为0,总股票数保持不变)。
  • 两种方式计算结果完全一致,可根据个人习惯选择。

内容的提问来源于stack exchange,提问作者TheNautical_Sailor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:50:21