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

如何用z-score及dplyr的mutate函数标准化股票收盘价数据

用dplyr实现z-score标准化

需求说明

需要对数据框中A、B、C三列的收盘价进行z-score标准化(公式:z = (x – μ) / σ),可以通过dplyr的mutate()结合across()函数批量处理多列,以下是具体实现方式:

代码实现

首先加载dplyr包,然后对目标列进行标准化:

library(dplyr)

# 原始数据框
df1 <- data.frame(date = c("01.01.", "02.01.", "03.01.", "04.01.", "05.01."),
                  A = c(102, 103, 107, 120, 134),
                  B = c(94, 95, 100, 93, 90),
                  C = c(55, 53, 50, 51, 48))

# 方式1:生成带_z后缀的新标准化列,保留原数据
df_zscore_new <- df1 %>%
  mutate(across(c(A, B, C), ~(.x - mean(.x)) / sd(.x), .names = "{col}_z"))

# 方式2:直接覆盖原列,替换为标准化后的值
df_zscore_overwrite <- df1 %>%
  mutate(across(c(A, B, C), ~(.x - mean(.x)) / sd(.x)))

关键说明

  • across(c(A, B, C)):指定需要处理的列,也可以用across(-date)排除日期列,自动处理所有数值列
  • ~(.x - mean(.x)) / sd(.x):这是z-score的匿名函数实现,.x代表当前处理的列
  • .names = "{col}_z":设置新列的命名规则,{col}会自动替换为原列名,生成如A_z、B_z的新列

关于标准差的补充

如果需要使用总体标准差(除以n,而非样本标准差的n-1),可以将公式改为:

~(.x - mean(.x)) / sqrt(mean((.x - mean(.x))^2))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:45:44