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

如何在R中用for循环遍历DataFrame列并计算数值列的均值与标准差?

获取DataFrame数值列的均值和标准差

先明确你两段代码的核心问题:

  • 第一段代码里,cereal.data$col是错误的引用方式,$仅支持固定列名,无法识别变量,需改为cereal.data[[col]]。
  • 第二段代码逻辑可行,但仅计算了均值,未处理标准差,也没有输出或保存结果。

方案1:修正循环写法

如果你偏好循环实现,以下两种写法均可:

按列名遍历

# 遍历所有列名
for (col in colnames(cereal.data)) {
  # 判断列是否为数值型
  if (is.numeric(cereal.data[[col]])) {
    # 计算均值和标准差(添加na.rm处理缺失值)
    col_mean <- mean(cereal.data[[col]], na.rm = TRUE)
    col_sd <- sd(cereal.data[[col]], na.rm = TRUE)
    # 打印结果
    cat(sprintf("列 %s:均值=%.2f,标准差=%.2f\n", col, col_mean, col_sd))
  }
}

按列索引遍历

columns <- colnames(cereal.data)
# 用seq_along替代1:length,避免空列场景报错
for (i in seq_along(columns)) {
  col <- columns[i]
  if (is.numeric(cereal.data[[col]])) {
    col_mean <- mean(cereal.data[[col]], na.rm = TRUE)
    col_sd <- sd(cereal.data[[col]], na.rm = TRUE)
    cat(sprintf("列 %s:均值=%.2f,标准差=%.2f\n", col, col_mean, col_sd))
  }
}

方案2:向量化函数实现(推荐)

R中优先用向量化操作替代循环,更简洁高效:

基础R的sapply写法

# 筛选数值列并计算统计量
num_stats <- sapply(cereal.data[, sapply(cereal.data, is.numeric)], 
                    function(x) c(均值 = mean(x, na.rm = TRUE), 标准差 = sd(x, na.rm = TRUE)))
# 转置结果,让每一行对应一列的统计信息
num_stats <- t(num_stats)
print(num_stats)

dplyr包的tidy风格写法

library(dplyr)

cereal.data %>%
  select(where(is.numeric)) %>% # 筛选所有数值列
  summarise(across(everything(), list(均值 = ~mean(., na.rm = TRUE), 标准差 = ~sd(., na.rm = TRUE))))

执行后会得到一个宽表,每一列对应原数据中数值列的均值和标准差结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:11:04