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

R语言如何基于原data.frame不同长度子集计算均值生成新数据框

基础R实现(无额外依赖)

你可以用vapply这类向量化迭代函数替代for循环,代码更简洁,出错概率更低。

# 原始数据
df <- data.frame(Steps = 1:10, Value = 20:29)

# 自定义你需要的步长向量
target_steps <- c(2, 5, 10)

# 批量计算每个步长对应前N行Value列的均值
mean_res <- vapply(target_steps, function(n) mean(df$Value[1:n]), numeric(1))

# 生成最终结果数据框
df2 <- data.frame(Steps = target_steps, Value = mean_res)

输出结果和示例完全一致:

> df2
  Steps Value
1     2  20.5
2     5  22.0
3    10  24.5

tidyverse风格实现(适合习惯dplyr/purrr的用户)

如果你常用tidyverse生态,可以用map_dbl实现同样的效果:

library(dplyr)
library(purrr)

target_steps <- c(2,5,10)
df2 <- tibble(Steps = target_steps) %>% 
  mutate(Value = map_dbl(Steps, ~mean(df$Value[seq_len(.x)])))

方案优势

  • 无需手动写for循环、不需要提前初始化结果容器,代码量更少
  • 自动处理边界情况:如果步长值超过原始数据框的总行数,会自动返回NA,你后续直接过滤掉异常值即可
  • 运行效率和for循环相当,但可读性更高,更符合R的函数式编程习惯

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:54:02