如何从rsample滚动原点分割的评估集提取y最值并跟踪分割ID?
从rsample滚动分割中提取评估集y值最值的tidyverse方案
我们可以通过dplyr与purrr的组合,高效处理rolling_origin生成的滚动分割,提取每个评估集的y值最大/最小值并关联对应分割ID:
完整代码
library(tidyverse) library(rsample) # 生成可复现的示例数据 set.seed(123) dat <- data.frame(x = 1:50, y = runif(50, 0.1, 30)) # 创建滚动分割:初始训练集10条,每次评估集5条 dat_split <- rsample::rolling_origin(dat, initial = 10, assess = 5) # 提取每个评估集的统计量并整理结果 result <- dat_split %>% # 遍历每个分割,提取评估集并计算y的最值 mutate(assess_stats = map(splits, ~ assessment(.x) %>% summarize(y_min = min(y), y_max = max(y)))) %>% # 将嵌套的统计结果展开为扁平表格 unnest(assess_stats) %>% # 保留核心列:分割ID、y最小值、y最大值 select(id, y_min, y_max) # 查看前6条结果 head(result)
代码说明
map(splits, ~ assessment(.x) %>% ...):遍历dat_split中的每个分割对象,用assessment()函数精准提取评估集数据,再通过summarize计算y的最值unnest(assess_stats):将嵌套在单元格内的统计结果展开,转化为标准的二维表格结构- 若需要计算更多统计量(如均值、中位数),只需在
summarize中添加对应逻辑即可
替代写法(rowwise风格)
如果偏好更直观的逐行处理逻辑,也可以用rowwise实现:
result_rowwise <- dat_split %>% rowwise(id) %>% mutate( y_min = min(assessment(splits)$y), y_max = max(assessment(splits)$y) ) %>% ungroup() %>% select(id, y_min, y_max)
内容的提问来源于stack exchange,提问作者D Kincaid
相关产品推荐
相关产品推荐

