当某些 id 的行数多于其他 id 时,按 id 从数据帧中抽取样本行

问题描述 投票:0回答:1

这是非常基本的,但我在网上找不到答案。我使用 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)

id 指的是特定的人,因此有些人比其他人有更多的观察结果。我想从数据框中抽取“个体”样本,但是对于每个抽样个体,该个体的所有行都将包含在样本中。如果我这样做 mydf[sample(nrow(mydf),3),]

例如,当我想要得到时,我显然只是得到三随机行

id week value 1 1 4.439524 1 2 4.769823 1 3 6.558708 4 1 6.224082 6 1 5.110683 6 2 4.444159 6 3 6.786913

如何对具有此约束的行进行采样?预先感谢您!

r dataframe sample
1个回答
0
投票

# set seed for reproducibility set.seed(958) # Sample size n <- 3 # Take simple random sample from the ids present: sampled_ids <- sample(unique(mydf$id), n) mydf[mydf$id %in% sampled_ids, ] # id week value # 4 2 1 5.070508 # 5 2 2 5.129288 # 12 5 1 5.359814 # 13 5 2 5.400771 # 14 6 1 5.110683 # 15 6 2 4.444159 # 16 6 3 6.786913

© www.soinside.com 2019 - 2024. All rights reserved.