我一直在使用utils包中的奇妙功能combn。此函数创建所有可能的组合,无需重复 Combn 描述。我将介绍我需要做的函数的一种用途,但它没有在combn函数中定义。我很想用一个很好的例子来介绍它。然而,我们想要实现的实际目标更复杂,需要更多的数据来实现。
我们想玩一个只有3 个人可以玩的游戏。不过我们是4个人。我们想知道玩游戏的所有可能组。参与者的名字是Alex、David、John和Zoe。可能的组合是:
names <- c("Alex","David","John","Zoe")
people.per.group <- 3
combn(names,people.per.group)
#Output
[,1] [,2] [,3] [,4]
[1,] "Alex" "Alex" "Alex" "David"
[2,] "David" "David" "John" "John"
[3,] "John" "Zoe" "Zoe" "Zoe"
但是,我们遇到了问题,因为Alex 与 John 的关系并不好。因此,我们不想将它们都包含在 group 中。这样我们就可以为只能选择其中一个的人创建群组。
# Alex --> Group 1
# David --> Group 2
# John --> Group 1
# Zoe --> Group 3
only.one.per.group <- c(1,2,1,3)
我正在寻找一个函数,它允许我做与 combn 相同的操作,但通过变量 only.one.per.group 限制组合。命名我期待使用 var.combn 的函数,代码将是:
names <- c("Alex","David","John","Zoe")
only.one.per.group <- c(1,2,1,3)
people.per.group <- 3
var.combn(names,people.per.group,only.one.per.group)
#Output
[,1] [,2]
[1,] "Alex" "David"
[2,] "David" "John"
[3,] "Zoe" "Zoe"
很长一段时间以来,我一直在寻找类似的功能。所以,如果你能告诉我一个函数来做这件事,或者你想到的任何方式来做这件事,那将是非常有用的。
我希望你喜欢这个例子,我很想知道如何去做。