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

基于rsample与purrr实现嵌套CV数据框多映射并新增列

搞定嵌套交叉验证数据集的批量处理需求

我来帮你实现遍历所有嵌套交叉验证数据集、提取分析集并新增列的操作,用purrr的嵌套map就能轻松搞定,步骤如下:

核心思路

你的cv_rolling里的inner_resamples是嵌套结构:外层是每个Resample对应的tibble,每个tibble里又有splits列(存的是rsample的split对象)。我们需要两层嵌套遍历:

  1. 外层遍历每个Resample对应的inner tibble
  2. 内层遍历每个inner tibble里的split对象,提取分析数据集并新增NEWCOL列
  3. 最后把处理后的结构放回原数据框,完成覆盖

完整代码实现

假设你已经加载了tidyverse、rsample这些依赖包,直接运行下面的代码即可:

# 遍历所有inner_resamples元素,处理每个子数据集并覆盖原结构
cv_rolling$inner_resamples <- map(cv_rolling$inner_resamples, function(inner_tbl) {
  # 对当前inner_tbl的splits列逐个处理:提取分析集 + 新增NEWCOL
  inner_tbl %>%
    mutate(
      # 替换这里的NEWCOL计算逻辑为你的实际需求
      processed_analysis = map(splits, ~ analysis(.x) %>% mutate(NEWCOL = 8677 + row_number() * 80))
    )
  # 如果需要替换掉原来的splits列,改成下面这行:
  # inner_tbl %>% mutate(splits = map(splits, ~ analysis(.x) %>% mutate(NEWCOL = 8677 + row_number() * 80)))
})

代码说明

  • 外层map:遍历cv_rolling$inner_resamples里的每一个Resample对应的tibble
  • 内层map(splits, ...):针对每个split对象,用analysis()提取用于模型训练的分析数据集,再通过mutate()新增NEWCOL列
  • 你可以根据实际需求修改NEWCOL的计算逻辑,比如换成基于现有列的公式(比如NEWCOL = Value * 10 + out),示例里的8677 + row_number()*80只是模仿你给出的示例输出

验证结果

运行完代码后,你可以查看第一个Resample的处理结果:

# 查看第一个Resample的处理后数据
cv_rolling$inner_resamples[[1]]

每个行的processed_analysis列(或替换后的splits列)里都会是带NEWCOL的数据集,和你给出的示例输出结构一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:16:51