R 中每个唯一列值的随机样本 1 行

Random Sample 1 row for each unique column value in R

我有一个包含 2 列 iduniquematch_no

的数据集

此处可重现示例

idunique <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
match_no <- c(1, 1, 1, 1, 2, 2, 3, 3, 4, 5)

df <- data.frame(idunique, match_no)

   idunique match_no
         1        1
         2        1
         3        1
         4        1
         5        2
         6        2
         7        3
         8        3
         9        4
        10        5

我需要从数据库中随机抽取 match_no 的出现次数,并提取 x 次唯一出现次数。

示例输出是 idunique 的随机子集,基于随机抽样的 match_no

  idunique match_no
        1        1
        5        2
        7        3
        9        4
       10        5

真实数据库有 600 万行,每行约 2000 次重复match_no,所以我需要能够更改样本大小的解决方案。

有了data.table,我们可以做到

library(data.table)
setDT(df)[df[, sample(.I, 1), match_no]$V1]

df %>% group_by(match_no) %>% sample_n(1)