[英]Randomizing rows in a matrix but keeping groups together in R
我正在嘗試按行隨機分配一個較大的矩陣,但是我需要將特定列中的相同數字保持在一起。
例如:
# Table A
Column A Column B
0.1 1
0.6 1
1.5 1
23 2
18 2
0.5 2
0.6 3
19 3
0.7 3
我的目標是按組隨機分組,在此示例中按Column B
分組。 我已經嘗試了sample.int(nrow(x))
,它可以很好地將所有矩陣隨機化,但是有沒有一種按組做到這一點的方法?
一種非常簡單的方法是使用“ data.table”,如下所示:
> library(data.table)
> as.data.table(mydf)[, .(Column_B = sample(Column_A)), by = Column_B]
Column_B Column_B
1: 1 0.6
2: 1 1.5
3: 1 0.1
4: 2 23.0
5: 2 18.0
6: 2 0.5
7: 3 0.6
8: 3 0.7
9: 3 19.0
或更籠統地說:
as.data.table(mydf)[, sample(.SD), by = Column_B]
類似地,使用“ dplyr”:
library(dplyr)
mydf %>%
group_by(Column_B) %>%
mutate(Column_A = sample(Column_A))
如果不轉換為data.frame / data.table且沒有外部包,則可以將?ave
與?sample
結合使用:
mymat[ave(seq_along(mymat[, "Col_A"]), mymat[, "Col_B"], FUN = sample),]
樣本數據:
set.seed(123)
mymat <- cbind(Col_A = rnorm(9), Col_B = rep(1:3, each = 3))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.