gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:04:37 27 4
gpt4 key购买 nike

我需要减少数据集中的行数。为此,我的策略是组中的行数超过 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com