根据另一个R中的因素对一列进行洗牌

use*_*569 6 r

我创建了一个数据框来说明我的问题.我对R比较新.

    #### permutation problem

a <- c("beagle", "beagle", "beagle", "basset", "basset")
b <- c(44, 33, 22, 34, 42)
c <- c(1:5)
d <- c(7:11)

dogframe <- data.frame(cbind(a,b,c,d))


output
> dogframe
       a  b c  d
1 beagle 44 1  7
2 beagle 33 2  8
3 beagle 22 3  9
4 basset 34 4 10
5 basset 42 5 11
> 
Run Code Online (Sandbox Code Playgroud)

我想要做的是按照列a中的因素随机改组b列.所以44,33和22的值将被改组为"beagle",34和42将被洗牌以用于basset.我希望结果是一个类似于原始数据的数据帧,只有列b中的混洗值.

谢谢.

flo*_*del 5

像这样:

dogframe$b <- ave(dogframe$b, dogframe$a, FUN = sample)
Run Code Online (Sandbox Code Playgroud)

你也可以写:

dogframe$b <- with(dogframe, ave(b, a, FUN = sample))
Run Code Online (Sandbox Code Playgroud)