我创建了一个数据框来说明我的问题。我对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
>

我想做的是按列a中的因子随机地对列b进行洗牌。因此,对于“beagle”,值44、33和22将被改组,对于贝塞特,值34和42将被改组。我希望结果是一个类似于原始的数据帧,并且在b列中仅混洗了值。

谢谢。

最佳答案

像这样:

dogframe$b <- ave(dogframe$b, dogframe$a, FUN = sample)

您也可以这样写:
dogframe$b <- with(dogframe, ave(b, a, FUN = sample))

关于r - 根据另一列R中的因素,对一列进行洗牌,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18895666/

10-10 14:53