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

如何在R语言中将时间序列的各列除以其首值?

优化后的实现方案

原代码的核心需求是将xts对象的每一列做归一化处理(即每列所有元素除以该列的第一个元素),以下是更简洁高效的优化实现:

完整优化代码

file <- "http://s3.amazonaws.com/assets.datacamp.com/production/course_1127/datasets/tmp_file.csv"
# 读取时直接指定行列为行名,减少后续操作
x <- read.csv(file, row.names = 1)
# 转换为xts对象
ts <- xts(x, order.by = as.Date(rownames(x), "%m/%d/%Y"))
# 向量化完成归一化,无需循环
ts <- ts / ts[1, ]

优化细节说明

  • 精简中间步骤:读取CSV时通过row.names = 1直接将第一列设为行名,省去单独处理行名的冗余操作。
  • 替换循环为向量化运算:利用R的向量化特性,ts / ts[1, ]会自动对每列执行"所有元素除以列首元素"的操作,比手动循环更简洁且运算效率更高。
  • 简化对象操作:直接对xts对象进行运算并赋值,无需提取coredata修改后再写回,减少不必要的中间变量。

可选扩展

如果需要保留原始xts对象不被覆盖,可新建变量存储归一化结果:

normalized_ts <- ts / ts[1, ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:34:55