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

如何在R中对dataframe每列应用函数,实现各列值除以对应列标准差

原代码问题梳理

  • 语法结构错误:for循环的参数、大括号配对都不符合R的语法规则
  • 逻辑杂糅:循环遍历逻辑和自定义函数的定义没有关联,也没有实际对数据集的列执行赋值操作
  • R的for循环默认不会返回计算结果,无法直接赋值给new对象

实现方案

方法1:基础R实现(无需安装额外包)

适合新手理解,直接遍历前168列做计算:

# 先复制原数据集到新对象,避免覆盖原数据
new_df <- df
# 遍历前168列,每列值除以该列的标准差(na.rm=TRUE自动跳过空值)
for (i in 1:168) {
  new_df[,i] <- new_df[,i] / sd(new_df[,i], na.rm = TRUE)
}

如果不想手动数列数,只要排除最后一列ID列的话,可以改成:

new_df <- df
# ncol(new_df)-1 代表总列数减1,自动排除最后一列ID
for (i in 1:(ncol(new_df)-1)) {
  new_df[,i] <- new_df[,i] / sd(new_df[,i], na.rm = TRUE)
}

方法2:tidyverse简洁实现

如果你已经安装了tidyverse系列包,用dplyr的列操作语法更简洁:

library(dplyr)
new_df <- df %>%
  # across(-ncol(.))代表除了最后一列之外的所有列,统一执行指定计算
  mutate(across(-ncol(.), ~.x / sd(.x, na.rm = TRUE)))

结果验证

你可以运行sd(new_df$var1)查看处理后的列标准差,处理后对应列的标准差为1,说明计算符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:39:03