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

R语言按行计算月度股票beta中位数 划分高低beta投资组合

R实现按月份beta中位数划分高低beta投资组合

原代码运行异常原因

  • 仅将字符型"N/A"替换为标准NA值,未将存储beta的字符列转换为数值类型,不满足中位数计算的数值类型要求
  • rowwise()场景下直接传入across()的返回值给median():across()返回的是子数据框结构,不是一维数值向量,无法正确计算中位数
  • 宽表结构下逐股票标记组合归属逻辑繁琐,长宽转换后分组操作更简洁

可直接运行的修正代码

library(dplyr)
library(tidyr)

OMXCB_result <- OMXCB_END %>%
  # 预处理:替换缺失值+统一转数值类型
  mutate(across(where(is.character), ~na_if(., "N/A") %>% as.numeric())) %>%
  # 按行(单月维度)计算当月全市场beta中位数
  rowwise() %>%
  mutate(monthly_median_beta = median(c_across(-Names), na.rm = TRUE)) %>%
  ungroup() %>%
  # 宽表转长表,每行对应「月份-单只股票」的单条观测
  pivot_longer(
    cols = -c(Names, monthly_median_beta),
    names_to = "stock_id",
    values_to = "beta"
  ) %>%
  # 按规则划分组合
  mutate(
    portfolio = case_when(
      beta >= monthly_median_beta ~ "高beta组合",
      beta < monthly_median_beta ~ "低beta组合",
      TRUE ~ NA_character_
    )
  )

关键逻辑说明

  • 行级计算用c_across()替代across():该函数专为rowwise()场景设计,会将选中的行内值拼接为一维向量,可直接传入统计函数计算
  • 中位数计算自动忽略beta值缺失的股票,beta为NA的样本不会被划入任何组合
  • 长表结构可直接支持后续分组统计:需要计算组合月度收益、做组合回测时,直接按Names(月份)+portfolio分组聚合即可
  • 代码完全适配提供的样例数据结构:Names列为月份标识,其余每列对应单只股票的beta序列

股票beta时间序列数据样例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:54:33