【问题标题】:Random Sample 1 row for each unique column value in R [duplicate]R中每个唯一列值的随机样本1行[重复]
【发布时间】:2021-06-28 16:01:56
【问题描述】:

我有一个包含两列 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 次唯一出现的次数。

示例输出将是基于随机抽样的match_noidunique 的随机子集

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

真正的数据库有 600 万行长,每个 match_no 有约 2000 个重复项,因此我需要能够更改样本大小的解决方案。

【问题讨论】:

标签: r data.table tidyverse plyr sample


【解决方案1】:

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

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

【讨论】:

  • 这个怎么样:setDT(df1)[, .SD[sample(x = .N, size = sample_size)], by = match_no][]
  • @M--也可以,不过我觉得.I会更快
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2010-09-16
    • 2021-06-04
    • 2015-12-27
    • 1970-01-01
    • 2011-12-10
    相关资源
    最近更新 更多