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

如何用向量化函数/lapply/map简化R中构建新DataFrame的重复计算?

简化多列重复计算的几种方法

你可以用purrr(tidyverse生态)或者base R的lapply来批量处理这些重复操作,避免手动写每一列的计算逻辑:

方法一:用tidyverse的map_dfc

这种方法更贴合tidyverse的风格,自动整合结果为dataframe,还能批量处理列名:

library(tidyverse)

iris_avg <- iris %>%
  # 筛选所有数值列(自动排除Species列)
  select(where(is.numeric)) %>%
  # 对每一列执行分组求均值的操作,结果按列绑定成dataframe
  map_dfc(~ colMeans(matrix(.x, nrow = 10))) %>%
  # 把列名简化成你需要的格式(比如Sepal.Length → SLength)
  rename_with(~ str_replace_all(.x, c("Sepal" = "S", "Petal" = "P", "\\." = "")))

方法二:base R的lapply实现

如果不想加载tidyverse,用base R也能轻松完成:

# 提取iris中的数值列
num_cols <- iris[sapply(iris, is.numeric)]

# 用lapply遍历每一列,执行计算后转成dataframe
iris_avg_base <- as.data.frame(lapply(num_cols, function(x) {
  colMeans(matrix(x, nrow = 10))
}))

# 重命名列名匹配需求
colnames(iris_avg_base) <- str_replace_all(colnames(num_cols), c("Sepal" = "S", "Petal" = "P", "\\." = ""))

两种方法得到的结果和你手动写的iris_avg完全一致,而且后续如果要增加列或者调整分组行数(比如把nrow改成5),只需要修改一处参数即可,不用重复修改每一列的代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:32:42