【问题标题】:R (dplyr package) - At least one row per group (random sampling with 10% rows from each group)R(dplyr 包)- 每组至少一行(随机抽样,每组 10% 行)
【发布时间】:2021-03-28 07:51:34
【问题描述】:

我正在尝试从分布在 80 种科学期刊中的总共 6173 篇文章中进行随机抽样。

如果所有期刊都包含在分析中会很有趣,但是,每个期刊的文章数量差异很大,纯随机过程可能不会包括所有期刊。因此,建议在每个期刊中包含 10% 的文章是一个不错的选择。

为了实现这一点,我使用了下面的代码。然而,由于非整数,每篇文章只有一篇文章的期刊被忽略,因为输出低于 0.5 并四舍五入为零。

为了保持样本尽可能少,我想只对 0 到 1 之间的值应用上限函数,其余值使用标准舍入函数更好。

这个问题可以通过手动搜索缺失的文章和对应的期刊来部分解决,但这对学习技能没有任何帮助,也确实不是一个好的解决方案。

如果考虑到所使用的代码,我将非常感谢任何建议,但如果这个问题看起来太微不足道,我深表歉意。

library(dplyr)
    journal <- dataset %>% dplyr::group_by(Journal) %>% dplyr::summarise(n = 0.1 * n())

sample <- function(journal, frac)
  {
  if(journal < 1)
  {sample_n(journal, ceiling({{frac}} * n()) )}
  else 
  {sample_n(journal, round({{frac}} * n()) )}
}

dataset_randomised <- dataset %>% sample(0.1)

print(dataset_randomised)

【问题讨论】:

标签: r dplyr group-by


【解决方案1】:

您可以为日志选择最多 1 或 0.1 * 行数的行。

library(dplyr)
journal <- dataset %>% group_by(Journal) %>% sample_n(size = max(1, round(n() * 0.1)))

【讨论】:

  • 你好罗纳克!非常感谢您的关注和及时回复。建议的代码运行良好,所有期刊都被正确处理。
猜你喜欢
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 2020-04-30
  • 1970-01-01
相关资源
最近更新 更多