私はI
obsevationsのデータフレームを持ち、各観測値はg
カテゴリのいずれかに属します。グループ(ブロック)別に観測値をランダム化
set.seed(9782)
I <- 500
g <- 10
library(dplyr)
anon_id <- function(n = 1, lenght = 12) {
randomString <- c(1:n)
for (i in 1:n)
{
randomString[i] <- paste(sample(c(0:9, letters, LETTERS),
lenght, replace = TRUE),
collapse = "")
}
return(randomString)
}
df <- data.frame(id = anon_id(n = I, lenght = 16),
group = sample(1:g, I, T))
私はランダム確率p
のいくつかのベクトル与えJ
「壷」の1つに各観測を割り当てます。それは壷J = 1に割り当てられる確率はp [1]です。追加された複雑さは、私がブロックごとにこのブロックを実行したいということです。
私はブロックを無視した場合、私は簡単にこれを行うことができます。
J <- 3
p <- c(0.25, 0.5, 0.25)
df1 <- df %>% mutate(urn = sample(x = c(1:J), size = I, replace = T, prob = p))
は、私が「ブロック」でそれを行うには、この方法について考え
# Block randomization
randomize_block <- function(g) {
df1 <- df %>% filter(group==g)
size <- nrow(df1)
df1 <- df1 %>% mutate(urn = sample(x = c(1:J),
size = size,
replace = T,
prob = p))
return(df1)
}
df2 <- lapply(1:g, randomize_block)
df2 <- data.table::rbindlist(df2)
は、より良い方法はありますか?
はグループによってあなただけのグループあなたが変異する前にできますか? – bramtayl
@bramtayl私はそれについて考えましたが、私はどのように 'size'をそのサンプル関数に渡すのか分かりません。各グループは異なる観測数を持つことができます。 – Ignacio
サイズにn()を使用してください – bramtayl