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

如何用R语言从每3行生物重复组中随机抽取1行至测试数据集

R语言实现按组抽取测试集(每3行一组)

核心思路

先为数据框添加每3行一组的分组标识,再针对每个组随机抽取1行作为测试数据,剩余行保留为训练数据。


方法一:基础R实现(无需额外包)

# 确保数据框行数为3的倍数(若不符合需先处理)
stopifnot(nrow(df) %% 3 == 0)

# 生成分组标识(每3行对应一个组)
group_ids <- gl(nrow(df)/3, 3)

# 抽取每个组的随机行索引
sample_rows <- unlist(tapply(seq_len(nrow(df)), group_ids, function(x) sample(x, 1)))

# 拆分测试集与训练集
df_test <- df[sample_rows, ]
df_train <- df[-sample_rows, ]

方法二:dplyr包实现(代码更简洁)

library(dplyr)

# 确保数据框行数为3的倍数
stopifnot(nrow(df) %% 3 == 0)

# 生成分组并抽取测试集
df_test <- df %>%
  mutate(group = rep(1:(nrow(.)/3), each = 3)) %>%
  group_by(group) %>%
  sample_n(size = 1) %>%
  ungroup() %>%
  select(-group)

# 从原数据框中移除测试集行,得到训练集
df_train <- df %>%
  anti_join(df_test, by = names(df))

注意事项

  • 如果原始数据框行数不是3的倍数,需先处理多余行(如删除或合并),否则分组逻辑会出错。
  • 若不想修改原数据框,基础R方法中可以直接用临时生成的group_ids分组,无需添加新列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:54:11