r - 如果组中的行数超过 X 个观察值,则随机抽样 X 个行数

标签 r random subset

我需要减少数据集中的行数。为此,我的策略是组中的行数超过 X 观察次数,如果组中的行数超过 X<,则从每个组中随机抽取 X 行数 行。

假设如下数据集:

set.seed(123)
n <- 10

df <- data.frame(id = c(1:n),
                 group = sample(1:3, n, replace = T))

> df
   id group
1   1     3
2   2     3
3   3     3
4   4     2
5   5     3
6   6     2
7   7     2
8   8     2
9   9     3
10 10     1

其中 X == 2。让我们数一数每组的行数。

> table(df$group)

1 2 3 
1 4 5 

这意味着在最终结果中,我希望在第 1 组中进行 1 次观察,在第 2 组和第 3 组中进行 2 次观察。应随机选择保留在第 2 组和第 3 组中的行。这会将数据的大小从 10 行减少到 5 行。

如何以有效的方式做到这一点?

谢谢!

最佳答案

这是一种按组列分组并在 slice 中创建条件以检查行数 (n()) 是否大于“X”的方法, 使用 X 对行序列 (row_number()) 进行采样,否则返回 row_number() (或者在 X< 的情况下进行采样 是不同的值

library(dplyr)
X <- 2
df %>% 
  group_by(group) %>% 
  slice(if(n() >= X) sample(row_number(), X, replace = FALSE) else 
     sample(row_number())) %>%
  ungroup

-输出

# A tibble: 5 × 2
     id group
  <int> <int>
1    10     1
2     8     2
3     4     2
4     1     3
5     9     3

关于r - 如果组中的行数超过 X 个观察值,则随机抽样 X 个行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71874584/

相关文章:

r - 为什么 dplyr 的过滤器会从因子变量中删除 NA 值?

python - 测试集合是否为子集,考虑集合中每个元素的数量(多重性)

r - R 中编辑距离的自定义替换矩阵

R:考虑因素,按周计算移动最大斜率

r - 绘图的两个方面的两个单独的 y 轴标题,同时使用 ggplot2 保留方面顶部 strip 标签

r - 子集数据破坏了 GLM

r - 如何在 Plotly 中记录颜色的变换值,但在颜色条上保留原始值?

c# - 如何从二维数组中随机选择一个位置?

php - 使用 PHP 随机 MySQL 行 - 低系统资源

javascript - 图片随机放置在页面上