以有序的方式洗牌

Shuffling tables in an ordered way

我真的不确定我正在尝试做的事情是否有技术术语,所以我会尽量说清楚。

我目前有 18 个 table 的 2x9 = 18 个单元格。这些是我将在实验中使用的标记集。

这些 table 中的每一个都以不同的语言上下文为特征,尤其是不同的主要动词。例如,这是我的前两个 tables:

...以此类推共18次

我想做的是“打乱”这些table,使每个table包含18个原始条件中的每个条件之一,并且没有条件重复两次.

例如,单元格 1 将包含“您可以享受...”,单元格 2 将包含“他可以攀登...”,依此类推,第一个 table,第二个 table 会将这些上下文向下移动一个单元格。

我不确定如何自动执行此操作(手动操作非常痛苦)。有没有办法在 R 中做到这一点?

关键是我不是试图随机化。 table 有一种有序的洗牌方式。

祝一切顺利,

卡梅隆

这个怎么样:

tab1 <- matrix(paste("cell", 1:18, ", table 1"), ncol=2)
tab2 <- matrix(paste("cell", 1:18, ", table 2"), ncol=2)
tab3 <- matrix(paste("cell", 1:18, ", table 3"), ncol=2)
tab4 <- matrix(paste("cell", 1:18, ", table 4"), ncol=2)
tab5 <- matrix(paste("cell", 1:18, ", table 5"), ncol=2)
tab6 <- matrix(paste("cell", 1:18, ", table 6"), ncol=2)
tab7 <- matrix(paste("cell", 1:18, ", table 7"), ncol=2)
tab8 <- matrix(paste("cell", 1:18, ", table 8"), ncol=2)
tab9 <- matrix(paste("cell", 1:18, ", table 9"), ncol=2)
tab10 <- matrix(paste("cell", 1:18, ", table 10"), ncol=2)
tab11 <- matrix(paste("cell", 1:18, ", table 11"), ncol=2)
tab12 <- matrix(paste("cell", 1:18, ", table 12"), ncol=2)
tab13 <- matrix(paste("cell", 1:18, ", table 13"), ncol=2)
tab14 <- matrix(paste("cell", 1:18, ", table 14"), ncol=2)
tab15 <- matrix(paste("cell", 1:18, ", table 15"), ncol=2)
tab16 <- matrix(paste("cell", 1:18, ", table 16"), ncol=2)
tab17 <- matrix(paste("cell", 1:18, ", table 17"), ncol=2)
tab18 <- matrix(paste("cell", 1:18, ", table 18"), ncol=2)

l <- list(
    tab1, tab2, tab3, tab4, tab5, tab6, tab7, tab8, tab9, 
    tab10, tab11, tab12, tab13, tab14, tab15, tab16, tab17, tab18)

newtabs <- lapply(1:9, function(i)t(sapply(l, function(x)x[i, ])))

newtabs 对象将是一个列表,其中每个元素都是您想要的 table 之一。比如上面,第一个table是:

> newtabs[[1]]
      [,1]                [,2]                
 [1,] "cell 1 , table 1"  "cell 10 , table 1" 
 [2,] "cell 1 , table 2"  "cell 10 , table 2" 
 [3,] "cell 1 , table 3"  "cell 10 , table 3" 
 [4,] "cell 1 , table 4"  "cell 10 , table 4" 
 [5,] "cell 1 , table 5"  "cell 10 , table 5" 
 [6,] "cell 1 , table 6"  "cell 10 , table 6" 
 [7,] "cell 1 , table 7"  "cell 10 , table 7" 
 [8,] "cell 1 , table 8"  "cell 10 , table 8" 
 [9,] "cell 1 , table 9"  "cell 10 , table 9" 
[10,] "cell 1 , table 10" "cell 10 , table 10"
[11,] "cell 1 , table 11" "cell 10 , table 11"
[12,] "cell 1 , table 12" "cell 10 , table 12"
[13,] "cell 1 , table 13" "cell 10 , table 13"
[14,] "cell 1 , table 14" "cell 10 , table 14"
[15,] "cell 1 , table 15" "cell 10 , table 15"
[16,] "cell 1 , table 16" "cell 10 , table 16"
[17,] "cell 1 , table 17" "cell 10 , table 17"
[18,] "cell 1 , table 18" "cell 10 , table 18"

所以首先我重新创建了你的 tables,使用基础 R 的 sentences 对象来模拟每个单元格:

start_index <- seq(1,18*18,18)
end_index <- seq(18,18*18,18)
for (i in 1:18){
  tables[[i]] <- sentences[start_index[i]:end_index[i]]
}

然后写了一个函数来遍历它们,使用 table 索引作为参数:

tablemaker <- function(n){
  new_table <- list()
  for (i in 1:18){
      new_table[i] <- tables[[ifelse(n-1+i > 18,n-1+i-18 ,n-1+i)]][i] 
  }
  return(new_table)
}

之后,我们可以映射它们:

new_tables <- purrr::map(1:18, tablemaker)

然后检查以确保所有单元格仍然是唯一的:

> 18*18
[1] 324
> length(unique(unlist(new_tables)))
[1] 324
> length(unique(unlist(tables)))
[1] 324