如何随机化和循环分类变量列表?
How do I randomize and loop a list of categorical variables?
我正在练习使用循环函数,并想创建一个循环,该循环将随机生成在 Covid 自我隔离的 14 天期间我的哪些堂兄弟应该给我奶奶打电话。
我创建了变量 "family",它指定了哪些表亲(例如 "Rob"、"David"、"Chantal")属于 ex 的哪个姨妈或叔叔。 "Laverne")。但是,我只想对我的堂兄弟进行抽样,而不是 aunts/uncles。
我假设会有 14 天的自我隔离,所以我需要对我的表亲进行两次以上的随机抽样(不更换)。也就是说,我的祖母在大多数日子里会接到 2 个孙子的电话,而在 2 天会接到 3 个孙子的电话。
days <-14
family <- list("Laverne" = c("Rob", "David", "Chantal"),
"Jerry" = c("Amber", "Todd", "Kyla"),
"Gwen" = c("Kirk", "Heather"),
"Carleen" = c("Amber", "Chris", "Katelyn"),
"Al" = c("Regan", "Adam", "Dana", "Ally_Taylor"),
"Celine" = c("Tyler", "Ashley", "Kayla", "Matthew"),
"Kathy" = c("Josh", "Cami", "Jessica", "Michelle", "Danielle"),
"Leanne" = c("Raylene", "Clinton", "Alina", "Tristina"),
"Kim" = "Anthony_Emerson",
"Dawna"= "Leiland_Kelsey")
我还没有写完循环代码。这是我目前所拥有的:
for(i in family:n){
sample1 <- sample(family, 1, replace = FALSE)
resample <- sample(sample1)
}
如有任何帮助,我们将不胜感激!
您可能还需要考虑 days
。
# initialize matrix
samp <- matrix(NA, nrow=days, ncol=length(family), dimnames=list(NULL, names(family)))
set.seed(42) ## for sake of reproducibility
for (j in 1:days) {
for (i in 1:length(family)) {
samp[j, i] <- sample(family[[i]], 1)
}
}
结果
samp
# Laverne Jerry Gwen Carleen Al Celine Kathy Leanne Kim Dawna
# [1,] "Rob" "Amber" "Kirk" "Amber" "Adam" "Matthew" "Cami" "Clinton" "Anthony_Emerson" "Leiland_Kelsey"
# [2,] "Chantal" "Kyla" "Heather" "Amber" "Regan" "Ashley" "Michelle" "Clinton" "Anthony_Emerson" "Leiland_Kelsey"
# [3,] "Chantal" "Amber" "Kirk" "Katelyn" "Ally_Taylor" "Tyler" "Danielle" "Raylene" "Anthony_Emerson" "Leiland_Kelsey"
# [4,] "Chantal" "Todd" "Kirk" "Chris" "Ally_Taylor" "Ashley" "Jessica" "Alina" "Anthony_Emerson" "Leiland_Kelsey"
# [5,] "David" "Todd" "Kirk" "Amber" "Ally_Taylor" "Ashley" "Cami" "Alina" "Anthony_Emerson" "Leiland_Kelsey"
# [6,] "Rob" "Amber" "Heather" "Chris" "Adam" "Ashley" "Cami" "Tristina" "Anthony_Emerson" "Leiland_Kelsey"
# [7,] "Rob" "Todd" "Kirk" "Chris" "Adam" "Ashley" "Danielle" "Raylene" "Anthony_Emerson" "Leiland_Kelsey"
# [8,] "Rob" "Todd" "Kirk" "Amber" "Ally_Taylor" "Matthew" "Josh" "Alina" "Anthony_Emerson" "Leiland_Kelsey"
# [9,] "Rob" "Todd" "Kirk" "Chris" "Adam" "Ashley" "Josh" "Clinton" "Anthony_Emerson" "Leiland_Kelsey"
# [10,] "Chantal" "Amber" "Heather" "Amber" "Ally_Taylor" "Kayla" "Cami" "Clinton" "Anthony_Emerson" "Leiland_Kelsey"
# [11,] "Rob" "Todd" "Kirk" "Chris" "Ally_Taylor" "Tyler" "Josh" "Tristina" "Anthony_Emerson" "Leiland_Kelsey"
# [12,] "Rob" "Todd" "Kirk" "Amber" "Adam" "Matthew" "Danielle" "Alina" "Anthony_Emerson" "Leiland_Kelsey"
# [13,] "Rob" "Todd" "Kirk" "Amber" "Dana" "Matthew" "Cami" "Alina" "Anthony_Emerson" "Leiland_Kelsey"
# [14,] "Rob" "Kyla" "Kirk" "Amber" "Regan" "Kayla" "Josh" "Clinton" "Anthony_Emerson" "Leiland_Kelsey"
没有for循环
没有 for
循环你可以这样做(注意在这种情况下不需要初始化矩阵):
set.seed(42)
samp <- t(replicate(days, Map(`[`, family, lapply(lengths(family), function(x)
sample(seq(x), 1)))))
## with output similar to above
我正在练习使用循环函数,并想创建一个循环,该循环将随机生成在 Covid 自我隔离的 14 天期间我的哪些堂兄弟应该给我奶奶打电话。
我创建了变量 "family",它指定了哪些表亲(例如 "Rob"、"David"、"Chantal")属于 ex 的哪个姨妈或叔叔。 "Laverne")。但是,我只想对我的堂兄弟进行抽样,而不是 aunts/uncles。
我假设会有 14 天的自我隔离,所以我需要对我的表亲进行两次以上的随机抽样(不更换)。也就是说,我的祖母在大多数日子里会接到 2 个孙子的电话,而在 2 天会接到 3 个孙子的电话。
days <-14
family <- list("Laverne" = c("Rob", "David", "Chantal"),
"Jerry" = c("Amber", "Todd", "Kyla"),
"Gwen" = c("Kirk", "Heather"),
"Carleen" = c("Amber", "Chris", "Katelyn"),
"Al" = c("Regan", "Adam", "Dana", "Ally_Taylor"),
"Celine" = c("Tyler", "Ashley", "Kayla", "Matthew"),
"Kathy" = c("Josh", "Cami", "Jessica", "Michelle", "Danielle"),
"Leanne" = c("Raylene", "Clinton", "Alina", "Tristina"),
"Kim" = "Anthony_Emerson",
"Dawna"= "Leiland_Kelsey")
我还没有写完循环代码。这是我目前所拥有的:
for(i in family:n){
sample1 <- sample(family, 1, replace = FALSE)
resample <- sample(sample1)
}
如有任何帮助,我们将不胜感激!
您可能还需要考虑 days
。
# initialize matrix
samp <- matrix(NA, nrow=days, ncol=length(family), dimnames=list(NULL, names(family)))
set.seed(42) ## for sake of reproducibility
for (j in 1:days) {
for (i in 1:length(family)) {
samp[j, i] <- sample(family[[i]], 1)
}
}
结果
samp
# Laverne Jerry Gwen Carleen Al Celine Kathy Leanne Kim Dawna
# [1,] "Rob" "Amber" "Kirk" "Amber" "Adam" "Matthew" "Cami" "Clinton" "Anthony_Emerson" "Leiland_Kelsey"
# [2,] "Chantal" "Kyla" "Heather" "Amber" "Regan" "Ashley" "Michelle" "Clinton" "Anthony_Emerson" "Leiland_Kelsey"
# [3,] "Chantal" "Amber" "Kirk" "Katelyn" "Ally_Taylor" "Tyler" "Danielle" "Raylene" "Anthony_Emerson" "Leiland_Kelsey"
# [4,] "Chantal" "Todd" "Kirk" "Chris" "Ally_Taylor" "Ashley" "Jessica" "Alina" "Anthony_Emerson" "Leiland_Kelsey"
# [5,] "David" "Todd" "Kirk" "Amber" "Ally_Taylor" "Ashley" "Cami" "Alina" "Anthony_Emerson" "Leiland_Kelsey"
# [6,] "Rob" "Amber" "Heather" "Chris" "Adam" "Ashley" "Cami" "Tristina" "Anthony_Emerson" "Leiland_Kelsey"
# [7,] "Rob" "Todd" "Kirk" "Chris" "Adam" "Ashley" "Danielle" "Raylene" "Anthony_Emerson" "Leiland_Kelsey"
# [8,] "Rob" "Todd" "Kirk" "Amber" "Ally_Taylor" "Matthew" "Josh" "Alina" "Anthony_Emerson" "Leiland_Kelsey"
# [9,] "Rob" "Todd" "Kirk" "Chris" "Adam" "Ashley" "Josh" "Clinton" "Anthony_Emerson" "Leiland_Kelsey"
# [10,] "Chantal" "Amber" "Heather" "Amber" "Ally_Taylor" "Kayla" "Cami" "Clinton" "Anthony_Emerson" "Leiland_Kelsey"
# [11,] "Rob" "Todd" "Kirk" "Chris" "Ally_Taylor" "Tyler" "Josh" "Tristina" "Anthony_Emerson" "Leiland_Kelsey"
# [12,] "Rob" "Todd" "Kirk" "Amber" "Adam" "Matthew" "Danielle" "Alina" "Anthony_Emerson" "Leiland_Kelsey"
# [13,] "Rob" "Todd" "Kirk" "Amber" "Dana" "Matthew" "Cami" "Alina" "Anthony_Emerson" "Leiland_Kelsey"
# [14,] "Rob" "Kyla" "Kirk" "Amber" "Regan" "Kayla" "Josh" "Clinton" "Anthony_Emerson" "Leiland_Kelsey"
没有for循环
没有 for
循环你可以这样做(注意在这种情况下不需要初始化矩阵):
set.seed(42)
samp <- t(replicate(days, Map(`[`, family, lapply(lengths(family), function(x)
sample(seq(x), 1)))))
## with output similar to above