You need to enable JavaScript to run this app. R语言中使用sample_n()抽取数据表半数行后,如何获取剩余另一半行
优惠活动
大模型
产品
解决方案
定价
更多

R语言中使用sample_n()抽取数据表半数行后,如何获取剩余另一半行

半量随机抽样后获取剩余行的R实现方法

核心逻辑

直接通过已抽取样本的行标识做差集筛选,从原数据表中拿出所有不属于已抽样本的行,两个子集完全互斥,既不会重复也不会遗漏。

具体操作写法

  • 普通data.frame对象场景
    原数据表为df,已经通过sample_n()抽好的半量子集存在half1中,直接通过行名匹配取反即可拿到剩余行:
    half2 <- df[!rownames(df) %in% rownames(half1), ]
  • Tibble/tidyverse生态场景
    Tibble默认没有可直接匹配的稳定行名,容易出现匹配错位,更稳妥的实现流程:
    1. 给原表新增临时行号标识列
      df <- df %>% mutate(.tmp_row = row_number())
    2. 正常调用sample_n()完成半量抽样
      half1 <- df %>% sample_n(size = floor(nrow(df)/2))
    3. 按行号差集筛选剩余样本,最后删掉临时列
      half2 <- df %>% filter(!(.tmp_row %in% half1$.tmp_row)) %>% select(-.tmp_row)

常见注意点

  • 抽样前必须通过set.seed()固定随机种子,保证拆分结果可复现
  • 若原表行数为奇数,抽样时用floor()/ceiling()调整抽样量,避免因size为小数触发sample_n()报错
  • 不要在抽完一半后再独立抽一次另一半,两次独立随机抽样必然会出现行重复、遗漏,达不到严格等大拆分的效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 23:24:04