R 中每个唯一列值的随机样本 1 行
Random Sample 1 row for each unique column value in R
我有一个包含 2 列 idunique
和 match_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)
我有一个包含 2 列 idunique
和 match_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)