簡體   English   中英

隨機排列矩陣中的行,但在R中將組保持在一起

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM