我正在尝试用 R 解决这个问题:在所有可能的字母组合中,我想随机选择 13 对的样本,条件是不重复任何字母。
我正在尝试以下操作:
x<- LETTERS
combi <- combn(x, 2, FUN = NULL, simplify = FALSE) #combines by 2
fulltable <- data.frame(Reduce(rbind, combi)) #Convert list to dataframe of 2 columns
它给了我 323 种可能的组合:
...
X.316 V Y
X.317 V Z
X.318 W X
X.319 W Y
X.320 W Z
X.321 X Y
X.322 X Z
X.323 Y Z
我想选择一个样本 - 让我们称之为 SET1- 13 对字母(总共有 26 个字母),其中没有重复的字母。然后,一旦创建了这些对,我想提取另一个具有相同条件的样本,但在这种情况下,不包括 SET1。
期望的结果:
X.1 A E
X.2 C H
X.3 B X
X.4 W Y
X.5 F K
…..
直到 X.13 并且没有字母在行或列中重复。
在第二个样本提取中,再次组合具有唯一字母的对,但在这种情况下,不允许以前的组合(即 AE / CH)。它还应该排除排列,例如 EA / H C。
谢谢 AJS
编辑--------------------- 这个解决方案对我有用:
test <- LETTERS
ctest <- combn(test, 2, FUN = NULL, simplify = FALSE)
ctabl <- data.frame(Reduce(rbind,ctest))
ctabl$row <- 1:nrow(ctabl)
for (i in 1:nrow(ctabl)){
sname <- ctabl%>% sample_n(13)
ctabl <- ctabl %>% subset(!row %in% sname$row)
print(sname)
}