如何从每个组具有不同行数的组中绘制 n 行?

df <- data.frame(matrix(rnorm(80), nrow=40))
df$color <-  rep(c("blue", "red", "yellow", "pink"), each=10)

我试过了,
library(dplyr)
outdat <- df %>%
  group_by(color) %>%
  sample_n(nrow(.), replace = TRUE)
outdat

但这会返回一个 data.frame,其中 nrow(.) 是来自 df 的 nrows 而不是子集。

This SO post is close ,但定义了特定数量的行绘制。我需要它特定于 dplyr 中的组。

最佳答案

另一种解决方法,使用 sample_frac :

outdat <- df %>%
    group_by(color) %>%
    sample_frac(1, replace = TRUE)
outdat
# # A tibble: 40 x 3
# # Groups:   color [4]
#             X1          X2 color
#          <dbl>       <dbl> <chr>
#  1  0.69256186  0.97180252  blue
#  2  1.54384827 -0.20268802  blue
#  3 -1.20068240 -0.45402013  blue
#  4  2.63407877 -0.31644247  blue
#  5  1.20716737 -0.91380874  blue
#  6  0.01067475  1.02004679  blue
#  7  0.01067475  1.02004679  blue
#  8  1.79732108 -0.04072946  blue
#  9  0.01067475  1.02004679  blue
# 10  1.79732108 -0.04072946  blue
# # ... with 30 more rows

此外,使用 outdat %>% ungroup() 删除分组。

关于r - 在具有不同 nrows 的组内随机抽取 n 个样本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47645205/

10-12 18:53