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

在R语言中如何将数据框列表拆分为多组训练集与测试集

R实现多数据框列表按75:25拆分训练/测试集

前提准备

你的示例数据构造代码如下:

df1 <- data.frame(a = 1:4, b = 3:6)
df2 <- data.frame(a = c(5,3,4,4), b = c(9,9,1,0))
df_list <- list(df1, df2)
# 先给列表元素命名,方便后续生成指定格式的结果名
names(df_list) <- c("df1", "df2")

方法1:基础R实现(无需安装第三方包)

# 设置随机种子保证拆分结果可复现
set.seed(123)

split_result <- unlist(lapply(names(df_list), function(cur_name) {
  cur_df <- df_list[[cur_name]]
  # 按75%比例抽取训练集行索引
  train_index <- sample(seq(nrow(cur_df)), size = floor(0.75 * nrow(cur_df)))
  # 拆分得到训练、测试集
  train_set <- cur_df[train_index, ]
  test_set <- cur_df[-train_index, ]
  # 按要求命名后返回
  output <- list(train_set, test_set)
  names(output) <- paste0(cur_name, c("_training", "_testing"))
  return(output)
}), recursive = FALSE)

运行完成后,split_result就是你需要的包含4个数据集的新列表,可直接通过split_result$df1_training、split_result$df2_testing等形式调取对应数据集。

方法2:tidyverse生态purrr包实现(代码更简洁)

library(purrr)
set.seed(123)

split_result <- imap(df_list, ~{
  train_index <- sample(seq(nrow(.x)), size = floor(0.75 * nrow(.x)))
  list(
    training = .x[train_index, ],
    testing = .x[-train_index, ]
  )
}) |> 
  list_flatten(name_spec = "{outer}_{inner}")

两种方法输出结果格式完全一致,可根据你的使用习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:15:08