[英]randomly ordering across groups (not within group) in data.table
假設我想按物種對iris
數據集進行排序(作為data.table
),保持觀察結果按物種分組並在物種間隨機排序。
我怎么做?
我不是在談論在群體(物種)中產生隨機秩序。
我的直覺是編寫下面的代碼。 但是它實際上創建了物種內部隨機變量。 至少它可以使問題重現
d <- iris %>% data.table
set.seed('12345')
d[,g:=runif(.N),Species]
您可以在i
進行二進制搜索。 一個較小的示例:
d <- data.table(Species = rep(letters[1:4], each = 2), ri = 1:8)
set.seed(1)
d[.(sample(unique(Species))), on = "Species"]
# Species ri
# 1: b 3
# 2: b 4
# 3: d 7
# 4: d 8
# 5: c 5
# 6: c 6
# 7: a 1
# 8: a 2
我們可以從1 ... N系列中隨機抽取樣本,其中N是所討論的因子( Species
)的水平數。
然后,我們將新訂單映射到一列並對其進行排序。 分為多個步驟進行說明,如下所示:
tmp <- sample_n(as.data.frame(seq(1,length(unique(d$Species)))),3)[,1]
d$index <- tmp[as.numeric(d$Species)]
d <- d[order(d$index),]
您可以將其壓縮為1行/步:
d <- d[order(sample_n(as.data.frame(seq(1,length(unique(d$Species)))),3)[,1][as.numeric(d$Species)]),]
或者,您可以執行以下操作:
e <- d[, .N, Species]
e[, g2 := runif(.N)]
d <- e[, .(Species, g2)][d, on = 'Species']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.