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

如何用初始资金逐月累乘DataFrame行计算年末投资组合价值?

解决思路与代码示例

先纠正你之前代码里的核心错误:

  • funds是数值变量(比如100000),不是数据框,不能用$运算符访问元素,funds$*$Amazon$Month1属于语法错误,R无法识别这种写法。
  • 单独执行stock_variations$Month1 * funds只计算了第一个月的资金变化,没有累乘后续月份的涨跌幅,自然得不到年末组合价值。

假设你的数据表stock_variations是宽格式(每行对应一只股票,列是Month1到Month12,单元格值为月度涨跌幅,比如涨5%记为0.05,跌2%记为-0.02),以下是正确的计算步骤:

步骤1:定义初始资金

initial_funds <- 100000

步骤2:计算每只股票的累计增长因子

对每只股票,将每个月的(1+涨跌幅)依次相乘,得到全年的累计增长倍数:

# 取除股票名称列外的所有月份列,逐行计算乘积
stock_variations$cumulative_factor <- apply(stock_variations[, -1], 1, function(x) prod(1 + x))

步骤3:计算单只股票年末价值

用初始资金乘以累计增长因子,得到每只股票的年末资金:

stock_variations$year_end_value <- initial_funds * stock_variations$cumulative_factor

步骤4:计算投资组合年末价值

如果是等权重组合(初始资金平均分配到所有股票),直接对单只股票年末价值取平均:

portfolio_value <- mean(stock_variations$year_end_value)

如果是自定义权重(比如Amazon占40%,Apple占60%),可以手动加权:

# 权重向量需和数据表中股票顺序对应
weights <- c(0.4, 0.6)
portfolio_value <- sum(stock_variations$year_end_value * weights)

特殊情况:如果你的数据是长格式

如果数据表是每行对应「股票-月份」的组合(列是Stock, Month, Return),需要先转成宽格式再计算:

library(tidyr)
# 转换为宽格式
wide_stocks <- pivot_wider(stock_variations, names_from = Month, values_from = Return)
# 之后重复步骤2-4即可

内容的提问来源于stack exchange,提问作者Pablo Ramírez Salazar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:05:18