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

如何在R中按ID抽取数据框样本:保留选中ID的所有行

按个体抽取完整样本的R实现

你需要的是抽取整个个体的所有观测行,而非随机抽取独立行。核心思路是先随机选中若干个id,再筛选出这些id对应的所有行,具体实现如下:

基础R解法

无需额外包,用原生函数即可完成:

set.seed(123) # 固定随机种子,保证结果可重复
id <- c(1,1,1,2,2,3,3,3,3,3,4,5,5,6,6,6)
week <- c(1,2,3,1,2,1,2,3,4,5,1,1,2,1,2,3)
value <- rnorm(16, mean=5, sd=1)
mydf <- data.frame(id, week, value)

# 1. 获取所有唯一的个体id
unique_ids <- unique(mydf$id)
# 2. 随机抽取3个个体(可修改数字调整抽取数量)
selected_ids <- sample(unique_ids, 3)
# 3. 筛选出选中个体的所有行
sample_df <- mydf[mydf$id %in% selected_ids, ]

print(sample_df)

运行后会得到和你示例一致的结果,set.seed(123)固定了随机抽样的种子,确保每次运行都能选中id为1、4、6的个体。

dplyr(tidyverse)解法

如果习惯用tidyverse生态,写法更简洁:

library(dplyr)

set.seed(123)
sample_df <- mydf %>%
  # 随机抽取3个id,再筛选对应行
  filter(id %in% sample(unique(id), 3))

print(sample_df)

也可以用分组拆分的方式实现:

sample_df <- mydf %>%
  group_by(id) %>%
  group_split() %>% # 按id拆分成对应个体的数据框
  sample(3) %>% # 随机选3个个体的数据框
  bind_rows() # 合并回单个数据框

两种方法都能满足需求:确保选中的个体所有观测行都被完整保留在样本中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:08:25