【问题标题】:Selected randomly-sized, random subsets of rows选择随机大小的随机行子集
【发布时间】:2017-10-27 09:35:07
【问题描述】:

我正在关注this 关于提取随机行子集的问题。

我的数据如下:

scenario   urban_areas_simple       place      population
North       Primary Urban Areas     Leeds      700,000
South       Primary Urban Areas     London     9,000,000
Scotland    Rural                   Shetland   22,000
...         ...                     ...

使用 dplyr,我有以下代码,它可以工作,并根据我的 scenariourban_areas_simple 列中的条件随机选择 4 行:

filter(lads, 
    scenario == "north" & urban_areas_simple == "Primary Urban Areas") %>% 
    sample_n(4) 

但是,我还想随机选择行数,因为这里我只是任意选择了 4 作为示例。

对于随机大小的子集,我如何随机选择满足这些条件的行?

注意:可能只有 10-50 行满足每个条件。

【问题讨论】:

  • sample_frac(runif(1))怎么样
  • 这不起作用罗宾?
  • @ThirstforKnowledge 当您尝试 Robin 的解决方案时究竟会发生什么?它对我来说很好。
  • 实际上,这是我的错误,它现在正在使用 Robin 的解决方案。你想发布一个正确的答案@RobinGertenbach?
  • 完成。我认为不值得添加到 Roman 的答案中,但忘记了分组的好处。

标签: r dplyr


【解决方案1】:

您可以使用sample(1:100, size = 1),而不是4。这将选择一个介于 1 和 100 之间的随机数。如果您想让该过程可重现,请在开始使用任何依赖于随机种子的函数之前粘贴 set.seed(x)x 是任意整数。

【讨论】:

  • 这行得通,是的,我已经设置了种子,我只是忘了把它放在问题中。当随机数大于数据中的观察数时,是否有避免/捕获/处理错误的方法?
  • @ThirstforKnowledge,这就是 Robin 的评论很好的原因。你可以使用mtcars %>% sample_n(sample(1:nrow(.), 1)),但它不能正确处理分组的data.frames。
  • @ThirstforKnowledge 你可以使用tryCatch。在这种情况下,它可能不是最合适的解决方案,但它非常通用。您可以使用1:nrow(x) 生成可能值的向量。
【解决方案2】:
filter(lads, 
  scenario == "north" & urban_areas_simple == "Primary Urban Areas") %>% 
  sample_frac(runif(1)) 

就是这么做的。

保证该值是可返回的,并且它可以处理来自具有不等组大小的分组数据帧的分层抽样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-21
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多