根据两列对数据帧进行采样

时间:2019-12-15 22:29:40

标签: r dataframe sample

我有一个数据框,例如

df <- data.frame(matrix(rnorm(40), nrow=20))
df$color <-  rep(c("blue", "red", "yellow", "pink"), each=5)
df$score <- rep(c(1,2,3,5), each = 5)

我想将基于两列colorscore的行采样到两个数据帧中,以便从每个数据帧中的每个组中获得几乎相等数量的行。例如,我有5行,颜色为蓝色,分数为1。我希望在一个数据框中有2行,在另一个数据框中有3行。如果我在一组中有sis行,则第3行应转到一个数据帧,第3行应转到另一个数据帧。

1 个答案:

答案 0 :(得分:1)

如果我正确理解,可以尝试以下方法:

set.seed(10)

df <- data.frame(matrix(rnorm(40), nrow=20))
df$color <-  rep(c("blue", "red", "yellow", "pink"), each=5)
df$score <- rep(c(1,2,3,5), each = 5)

library(dplyr)

df %>%
  group_by(color, score) %>%
  mutate(grp = sample(seq_along(score) %% 2)) %>%
  group_by(grp) %>%
  group_split()


[[1]]
# A tibble: 8 x 5
      X1     X2 color  score   grp
   <dbl>  <dbl> <chr>  <dbl> <dbl>
1  0.675  0.257 blue       1     0
2 -0.548  0.365 blue       1     0
3 -1.89   0.851 red        2     0
4  1.09  -0.173 red        2     0
5  1.65  -0.500 yellow     3     0
6 -0.186  0.564 yellow     3     0
7 -0.208 -1.70  pink       5     0
8  0.661  0.447 pink       5     0

[[2]]
# A tibble: 12 x 5
        X1      X2 color  score   grp
     <dbl>   <dbl> <chr>  <dbl> <dbl>
 1  0.0555  2.12   blue       1     1
 2 -0.738  -0.843  blue       1     1
 3  0.833  -0.939  blue       1     1
 4 -1.57   -0.172  red        2     1
 5  1.43    0.767  red        2     1
 6  1.14    1.32   red        2     1
 7  1.01    0.997  yellow     3     1
 8 -1.20   -0.357  yellow     3     1
 9  0.474  -0.0911 yellow     3     1
10 -2.44    0.765  pink       5     1
11  1.15    0.463  pink       5     1
12 -0.426   1.53   pink       5     1