You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

R语言:如何对数据框多变量做均值标准化并添加_sd后缀?

解决均值标准化并添加_sd后缀的问题

没问题!我帮你调整代码来实现批量均值标准化(均值=0、标准差=1),同时给标准化后的变量加上_sd后缀,用dplyr就能轻松搞定,比手动逐个添加高效多了。

推荐写法(dplyr 1.0.0+版本)

现在dplyr推荐用across()代替旧的mutate_at(),写法更简洁直观,直接一步完成标准化和命名:

data("mtcars")
# 定义需要标准化的变量列表
sd_outcomes <- c("disp", "hp", "wt", "qsec")

# 执行标准化并添加_sd后缀
data <- mtcars %>%
  mutate(
    across(
      all_of(sd_outcomes), 
      ~scale(., center = TRUE, scale = TRUE), 
      .names = "{col}_sd"
    )
  )

代码解释:

  • all_of(sd_outcomes):精准指定我们要处理的变量列表
  • ~scale(., center = TRUE, scale = TRUE):这就是核心的均值标准化逻辑,center=TRUE让均值为0,scale=TRUE让标准差为1
  • .names = "{col}_sd":自动给新生成的列命名为「原列名+_sd」,比如disp变成disp_sd,省去了额外的重命名步骤

旧版dplyr写法(<1.0.0)

如果你还在使用旧版本的dplyr,可以用mutate_at()来实现:

data("mtcars")
sd_outcomes <- c("disp", "hp", "wt", "qsec")

data <- mtcars %>%
  mutate_at(vars(one_of(sd_outcomes)), funs(sd = scale(., center = TRUE, scale = TRUE))) %>%
  rename_at(vars(contains("_sd")), funs(paste0(gsub("_sd$", "", .), "_sd")))

或者更简化的写法,直接在funs()里指定新列名:

data <- mtcars %>%
  mutate_at(vars(one_of(sd_outcomes)), funs(paste0(., "_sd") = scale(., center = TRUE, scale = TRUE)))

验证结果

你可以用下面的代码检查标准化是否成功:

# 查看标准化后变量的均值(应该接近0)
colMeans(data[, paste0(sd_outcomes, "_sd")])
# 查看标准化后变量的标准差(应该接近1)
apply(data[, paste0(sd_outcomes, "_sd")], 2, sd)

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

火山引擎 最新活动