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

将xts格式虚拟变量表按行转换为行和为1的均匀权重的实现方法

解决方案

你需要的核心逻辑是按行统计1的个数,再将该行所有1替换为1/个数,以下是两种可直接运行的R实现:

前置准备:构造示例xts数据

library(xts)
# 示例数据与你给出的结构完全一致
raw_data <- xts(
  matrix(
    c(1, NA, 1, 1, NA, 1, NA,
      1, NA, 1, 1, 1, 1, NA),
    nrow = 2,
    byrow = TRUE,
    dimnames = list(NULL, c("NESN", "ROG", "NOVN", "ZURN", "ABBN", "UBSG", "LONN"))
  ),
  order.by = as.Date(c("1989-12-01", "1990-01-01"))
)

方法1:apply按行处理(可读性强,适合小数据集)

直接按行遍历,每行单独计算权重:

# 按行处理,每行所有元素除以该行1的总个数
weight_data <- t(apply(raw_data, 1, function(row) {
  n <- sum(row, na.rm = TRUE)
  row / n
}))
# 转回xts格式保留时间索引
weight_data <- as.xts(weight_data)

方法2:向量化运算(速度快,适合大规模数据集)

利用矩阵运算避免循环,处理万行以上的xts数据时效率提升明显:

# 先统计每行1的总个数
row_n <- rowSums(raw_data, na.rm = TRUE)
# 转置后做除法再转回,保证按行广播运算
weight_data <- as.xts(t(t(raw_data) / row_n))

两种方法得到的结果完全符合你给出的目标格式,NA值会自动保留不需要额外处理,得到的权重矩阵可直接用于后续投资组合换手率计算。


内容的提问来源于stack exchange,提问作者Elias K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 17:54:02