在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
相关产品推荐
相关产品推荐

