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

如何在R中按规则将数据框行依次存入两个列表?

实现方法

先明确规则(结合你给出的代码示例修正描述冲突:my_list_2实际每次取5行,若最后一次不足5行则取剩余所有行):

  • my_list_1:始终从第1行开始,初始取10行,之后每次新增5行(结束行依次为10、15、20...)
  • my_list_2:从my_list_1当前元素的结束行的下一行开始,每次取5行,直到所有数据处理完毕

以下是鲁棒性较强的R代码实现:

# 设置随机种子保证结果可复现
set.seed(123)
# 生成原始数据框
my_data = data.frame(id = 1:100, var = rnorm(100,100,100))

# 获取数据总行数
n <- nrow(my_data)
# 生成my_list_1的结束行序列:从10开始,每次加5,直到下一个结束行的下一行不超过总行数
end1_seq <- seq(from = 10, to = n - 1, by = 5)

# 生成训练集列表my_list_1
my_list_1 <- lapply(end1_seq, function(x) {
  my_data[1:x, ]
})

# 生成测试集列表my_list_2
my_list_2 <- lapply(end1_seq, function(x) {
  test_start <- x + 1
  test_end <- min(x + 5, n)
  my_data[test_start:test_end, ]
})

代码验证

可以通过以下代码检查前几个元素是否符合要求:

# 查看my_list_1第一个元素的行范围
range(my_list_1[[1]]$id) # 输出 1 10
# 查看my_list_2第一个元素的行范围
range(my_list_2[[1]]$id) # 输出 11 15

# 查看my_list_1第二个元素的行范围
range(my_list_1[[2]]$id) # 输出 1 15
# 查看my_list_2第二个元素的行范围
range(my_list_2[[2]]$id) # 输出 16 20

# 查看最后一组的行范围
range(my_list_1[[length(my_list_1)]]$id) # 输出 1 95
range(my_list_2[[length(my_list_2)]]$id) # 输出 96 100

适配非5倍数的总行数

如果你的数据总行数不是5的倍数(比如97行),代码会自动处理最后一组测试集:

  • my_list_1最后一个元素取1:95行
  • my_list_2最后一个元素取96:97行(剩余的2行)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:28:02