在 R 中应用数据框的分层 shuffling/sorting

Apply hierachial shuffling/sorting of data frame in R

我有一个数据框,我想在其中洗牌或更一般地按层次对值进行排序,但我被卡住了。这是我的例子:

library(plyr)
set.seed(123)
df <- data.frame(a = rep(letters[1:4], each = 10), b = rnorm(40))
> head(df)
  a          b
1 a -0.1264280
2 a  0.7284234
3 a -1.8782385
4 a  0.2530623
5 a  0.7577013
6 a -0.9339964

在这个例子中,我想对值进行 suffle(采样),但仅限于字母内,以便分配给 a 列中的字母 a 的值不能分配给任何其他字母,而只能分配给不同的行,但是不是 b、c 或 d。

我试过这个ddply(df, c('a'), b = sample(b))但是没用。

使用dplyrgroup_by(a)然后使用mutate(b = sample(b))

library(dplyr)
head(df, 10)
   a           b
1  a -0.56047565
2  a -0.23017749
3  a  1.55870831
4  a  0.07050839
5  a  0.12928774
6  a  1.71506499
7  a  0.46091621
8  a -1.26506123
9  a -0.68685285
10 a -0.44566197

df %>% group_by(a) %>% mutate(b = sample(b))
# A tibble: 40 x 2
# Groups:   a [4]
   a           b
   <chr>   <dbl>
 1 a      1.56  
 2 a      0.461 
 3 a      0.0705
 4 a      1.72  
 5 a     -0.560 
 6 a     -0.446 
 7 a     -1.27  
 8 a      0.129 
 9 a     -0.230 
10 a     -0.687 
# ... with 30 more rows