R:唯一ID的分层随机样本比例';通过分组变量进行排序

R:唯一ID的分层随机样本比例';通过分组变量进行排序,r,random,dplyr,sampling,R,Random,Dplyr,Sampling,通过以下样本数据框,我想从因子“队列”的每个层级抽取ID“ID”的分层随机样本(例如40%): 但我的实际数据是纵向的,因此我在每个队列中有多个相同ID的病例,以及几个不同规模的队列,因此需要选择一部分唯一ID。任何协助都将不胜感激 这里有一种方法: data %>% group_by(Cohort) %>% filter(ID %in% sample(unique(ID), ceiling(0.4*length(unique(ID))))) 这将返回包含随机采样ID的所有行。

通过以下样本数据框,我想从因子“队列”的每个层级抽取ID“ID”的分层随机样本(例如40%):

但我的实际数据是纵向的,因此我在每个队列中有多个相同ID的病例,以及几个不同规模的队列,因此需要选择一部分唯一ID。任何协助都将不胜感激

这里有一种方法:

data %>% group_by(Cohort) %>%
  filter(ID %in% sample(unique(ID), ceiling(0.4*length(unique(ID)))))
这将返回包含随机采样ID的所有行。换句话说,我假设您有与每一行相关的度量值,并且您想要每个采样ID的所有度量值。(如果您只想要为每个采样ID返回一行,那么@bramtayl的答案就可以了。)

例如:

data = data.frame(rbind(data, data), value=rnorm(2*nrow(data)))

data %>% group_by(Cohort) %>%
  filter(ID %in% sample(unique(ID), ceiling(0.4*length(unique(ID)))))

   Cohort     ID       value
    (int) (fctr)       (dbl)
1       1    a1  -0.92370760
2       1     a2 -0.37230655
3       1     a3 -1.27037502
4       1     a7 -0.34545295
5       2    b14 -2.08205561
6       2    b17  0.31393998
7       2    b18 -0.02250819
8       2    b19  0.53065857
9       2    b20  0.03924414
10      1    a1  -0.08275011
11      1     a2 -0.10036822
12      1     a3  1.42397042
13      1     a7 -0.35203237
14      2    b14  0.30422865
15      2    b17 -1.82008014
16      2    b18  1.67548568
17      2    b19  0.74324596
18      2    b20  0.27725794
为什么不呢

library(dplyr)

data %>%
  select(ID, Cohort) %>%
  distinct %>%
  group_by(Cohort) %>%
  sample_frac(0.4) %>%
  left_join(data)

你应该提供重现问题的数据,否则我们无法理解。。。因此,如果您有多个ID,请使用此功能生成数据;)
data = data.frame(rbind(data, data), value=rnorm(2*nrow(data)))

data %>% group_by(Cohort) %>%
  filter(ID %in% sample(unique(ID), ceiling(0.4*length(unique(ID)))))

   Cohort     ID       value
    (int) (fctr)       (dbl)
1       1    a1  -0.92370760
2       1     a2 -0.37230655
3       1     a3 -1.27037502
4       1     a7 -0.34545295
5       2    b14 -2.08205561
6       2    b17  0.31393998
7       2    b18 -0.02250819
8       2    b19  0.53065857
9       2    b20  0.03924414
10      1    a1  -0.08275011
11      1     a2 -0.10036822
12      1     a3  1.42397042
13      1     a7 -0.35203237
14      2    b14  0.30422865
15      2    b17 -1.82008014
16      2    b18  1.67548568
17      2    b19  0.74324596
18      2    b20  0.27725794
library(dplyr)

data %>%
  select(ID, Cohort) %>%
  distinct %>%
  group_by(Cohort) %>%
  sample_frac(0.4) %>%
  left_join(data)