如何随机化和循环分类变量列表?

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