如何在R中将10000个iid观测值分块并提取每个块的最大值?
在R中实现分块提取最大值
你可以通过以下几种简洁的方法完成数据分块并提取每个块的最大值:
方法一:基础R(split + sapply)
先通过gl()生成分组标识,再拆分数据并计算每组最大值:
# 生成示例数据 n <- 10000 exp_data <- rexp(n, 1) # 创建分组因子:100个组,每组10个元素 groups <- gl(n = 100, k = 10) # 拆分数据并提取每组最大值 max_values <- sapply(split(exp_data, groups), max)
方法二:基础R(tapply,更精简)
tapply可以直接对分组数据执行聚合操作,一步到位:
max_values <- tapply(exp_data, gl(100, 10), max)
方法三:tidyverse(dplyr)
如果习惯使用tidyverse生态,用dplyr的分组计算逻辑更直观:
library(dplyr) # 转换为数据框并添加分组列 exp_df <- tibble(value = exp_data) %>% mutate(group = rep(1:100, each = 10)) # 分组提取最大值 max_values <- exp_df %>% group_by(group) %>% summarize(max_val = max(value)) %>% pull(max_val)
以上方法得到的max_values均为长度100的向量,每个元素对应一个块的最大值。
内容的提问来源于stack exchange,提问作者oliver
相关产品推荐
相关产品推荐

