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