这是非常基本的,但我在网上找不到答案。我使用 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
如何对具有此约束的行进行采样?预先感谢您!
# 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