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

基于变量值创建新Data.Frame:股票日度组合权重计算需求

解决股票投资组合每日指标计算问题

我来帮你搞定这个股票数据处理需求,咱们先从修正测试数据开始,再一步步实现你要的所有计算:

第一步:修正测试数据的日期格式

你提供的测试数据日期格式是"2017-22-11",这不符合标准的年-月-日格式,所以没法转换成日期类型。咱们先把它改成正确的格式,比如"2017-11-22"(年-月-日):

# 修正后的测试数据
RawInput <- data.frame(
  Date = c("2017-11-22", "2017-12-22", "2017-11-23", "2017-11-22", "2017-12-22", "2017-11-23", "2017-11-22"),
  Close = c(50, 55, 56, 10, 11, 12, 200),
  Volume = c(100, 110, 150, 60, 70, 80, 30),
  Stock_ID = factor(c(1, 1, 1, 2, 2, 2, 3))
)
# 转换成日期类型
RawInput$Date <- as.Date(RawInput$Date)

第二步:用dplyr实现每日指标计算

我们用dplyr包来完成分组计算,它能轻松处理可变数量的股票,完全适配你“每个日期1至n只股票”的数据特点。以下是完整的代码:

library(dplyr)

# 计算核心指标
portfolio_data <- RawInput %>%
  # 1. 先计算每只股票的当日交易价值(收盘价*成交量)
  mutate(Trade_Value = Close * Volume) %>%
  # 2. 按日期分组,计算当日总交易价值,并给每只股票标记当日总价值
  group_by(Date) %>%
  mutate(Daily_Total_Value = sum(Trade_Value)) %>%
  # 3. 计算每只股票的当日权重(个股交易价值/当日总交易价值)
  mutate(Weight = Trade_Value / Daily_Total_Value) %>%
  # 4. 将数据转成宽格式:每个日期一行,每只股票的权重单独成列
  tidyr::pivot_wider(
    id_cols = Date,
    names_from = Stock_ID,
    values_from = Weight,
    names_prefix = "Stock_",
    values_fill = 0  # 当日没有交易的股票权重填0
  ) %>%
  # 5. 计算每日收益率:(当日总价值 - 前一日总价值)/前一日总价值
  mutate(Daily_Return = (Daily_Total_Value - lag(Daily_Total_Value)) / lag(Daily_Total_Value)) %>%
  # 取消分组
  ungroup()

# 查看结果
print(portfolio_data)

代码解释

  • 交易价值计算:Trade_Value = Close * Volume,得到每只股票当日的成交总金额。
  • 每日总价值:按Date分组后用sum(Trade_Value)计算当日所有股票的总交易价值。
  • 股票权重:用个股交易价值除以当日总价值,得到该股票在当日组合中的占比。
  • 宽格式转换:用pivot_wider把每只股票的权重转成单独列,这样每个日期只会出现一行,完全符合你要的新DataFrame格式;values_fill=0确保当日没交易的股票权重显示为0,兼容可变数量的股票。
  • 每日收益率:用lag()函数获取前一日的总交易价值,然后计算当日相对于前一日的收益率。

结果说明

最终的portfolio_data包含以下列:

  • Date:日期(每个日期唯一)
  • Daily_Total_Value:当日所有股票的总交易价值
  • Stock_1、Stock_2、Stock_3...:对应股票当日的组合权重(自动适配数据中的股票数量)
  • Daily_Return:当日组合的收益率(第一日因为没有前一日数据,会显示NA,你可以根据需求处理)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:10:39