【发布时间】:2020-09-29 08:00:45
【问题描述】:
在特定的列中,我有几个类别。我想随机稀释/稀释/删除一些行仅在一个类别中。我见过sample_n 与group_by 一起使用,但它的size 参数适用于为分组变量中的每个类别删除相同数量的行。我想为每个组指定不同的size。
其次,我希望“就地”执行它,这意味着我希望它返回相同的原始数据帧,只是现在它在我试图“稀释”的特定类别中的行数会更少。
示例数据
library(tidyverse)
set.seed(123)
df <-
tibble(
color = sample(c("red", "blue", "yellow", "green", "brown"), size = 1000, replace = T),
value = sample(0:750, size = 1000, replace = T)
)
df
## # A tibble: 1,000 x 2
## color value
## <chr> <int>
## 1 yellow 251
## 2 yellow 389
## 3 blue 742
## 4 blue 227
## 5 yellow 505
## 6 brown 47
## 7 green 381
## 8 red 667
## 9 blue 195
## 10 yellow 680
## # ... with 990 more rows
当按颜色计数时,我看到:
df %>% count(color)
color n
<chr> <int>
1 blue 204
2 brown 202
3 green 191
4 red 203
5 yellow 200
现在假设我只想减少 red 颜色的行数。假设我只想要10 行用于color == red。显然,简单地使用sample_n 并不能让我到达那里:
df %>%
group_by(color) %>%
sample_n(10) %>%
count(color)
color n
<chr> <int>
1 blue 10
2 brown 10
3 green 10
4 red 10
5 yellow 10
如何指定只有color == "red" 将有10 行,而其他颜色保持不变?
我看到了一些类似的问题 (like this one),但无法根据我的情况调整答案。
【问题讨论】: