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

如何仅使用R基础函数将data.frame拆分为两个均等部分?

仅用R base函数将data.frame均分为大小完全相等的两部分

不需要加载任何第三方扩展包,直接用base R内置的索引切片逻辑就能实现,全程没有额外依赖。

核心逻辑

通过nrow()获取数据总行数,计算单份数据的目标行数,再按行索引对原数据做切片即可。如果要求两个部分大小完全相等,首先要保证原数据的总行数为偶数,否则无法做到绝对等大。

按原顺序拆分(固定拆分场景)

直接按数据原有排列顺序切分,代码示例(用R内置的mtcars数据集做测试,该数据集共32行,为偶数可完全等分):

# 目标数据,替换成你自己的data.frame即可
df <- mtcars

# 计算总行数
total_n <- nrow(df)
# 行数奇偶校验
if (total_n %% 2 != 0) {
  stop("当前数据行数为奇数,无法拆分为行数完全相等的两个部分")
}
half_n <- total_n / 2

# 切片得到两个子集
df1 <- df[1:half_n, ]
df2 <- df[(half_n + 1):total_n, ]

运行后可自行校验:nrow(df1)和nrow(df2)的返回值完全一致,列结构和原数据完全相同。

随机均匀拆分(适合抽样、训练测试集拆分场景)

如果需要打乱原数据顺序后再均分,用base内置的sample()函数生成乱序索引再切片即可:

# 生成打乱的全行索引
shuffle_index <- sample(x = 1:total_n, size = total_n)
# 按乱序索引切片
df1_random <- df[shuffle_index[1:half_n], ]
df2_random <- df[shuffle_index[(half_n + 1):total_n], ]

补充:如果你的数据行数是奇数、不需要严格完全等大,只需要把单份行数计算改成half_n <- floor(total_n / 2)即可,拆分后两个子集行数差1,逻辑和上述代码完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:15:35