【发布时间】:2018-04-09 20:03:48
【问题描述】:
首先,请接受我对一个糟糕的标题的歉意——我相信会有更好的标题,但我缺乏正确的英语/数学术语来正确表达它。 我也很确定我的问题很简单,但由于一些基本的数学无知,我什至不知道如何调用一个像样的谷歌搜索。
我正在尝试在成对的列中查找所有可能的项目组合。
给定这样的数据框:
data.frame(obj1 = c("A", "B", "C", "D", "E", "F"),
obj2 = c("B", "C", "D", "E", "F", "A"),
obj3 = c("C", "D", "E", "F", "A", "B"),
obj4 = c("D", "E", "F", "A", "B", "C"),
obj5 = c("E", "F", "A", "B", "C", "D"),
obj6 = c("F", "A", "B", "C", "D", "E"))
obj1 obj2 obj3 obj4 obj5 obj6
1 A B C D E F
2 B C D E F A
3 C D E F A B
4 D E F A B C
5 E F A B C D
6 F A B C D E
我想以某种方式添加新行,即每对列 (obj1-obj2, obj1-obj3, obj1-obj4, ..., @ 987654336@-obj6) 出现所有项目组合。
例如:在第一列对中:obj1-obj2,项目 A 仅与项目 B 和 F 一起出现。缺少其他项目级别组合,这就是我想要的。
注意事项:
- 每个项目 (A,...,F) 在数据框的每一行中只能出现一次
- 相同的字母对(A-B 和 B-A)在一行中被视为重复,而不是在列中
实际上,我希望按行增长这个数据框,以便在选择随机的一对列时,会出现 6 个项目的每个组合。
我的直觉告诉我,我正在查看一个 90 x 6 大小的数据框,但这只是直觉,我无法输入公式并解释我是如何得出这个数字的 :)
如果我的问题不清楚,答案很明显或以任何其他方式违反任何规则,请告诉我,以便我尝试解释自己
编辑
收到所有的cmets后,我会尝试更清楚地解释自己。
考虑一下这个简单的实验条件表,我们称它为 table1 并将其视为一个对象间表:
在这种更简单的情况下,每个参与者将看到 6 对目标项目(A、B、C),这些目标项目以下列方式(table2)取自列 (col1, col2, col3) > - 在主题表中):
这 6 个试验保证每对中的每个参与者都存在目标项目的每个组合。
如果我以固定顺序(例如:快乐、悲伤、聪明、无聊、困惑、疲倦)为每个参与者呈现 6 个不同的特征(表 2 中的每个试验一个),则在 3 个参与者之后将呈现每个特征关于目标项目的每个组合。
对于参与者 1 - 特征快乐将呈现目标 A - B
对于参与者 2 - 特征快乐将与目标 B - C
一起呈现
对于参与者 3 - 特征快乐将呈现与目标 C - A
注意,一组(理论)B - A 将被视为重复。
我正在寻找一种将 table1 从上述 3 项示例扩展为 6 项 table1 的方法。 自然 table2 也会增长,但已经处理好了。 Table1 是导致我出现问题的原因。
这就是起点的样子
感谢您的帮助。 最好的问候。
【问题讨论】:
-
我在发布之前发现了这个问题,但不知道如何使用提供的解决方案 - 特别是 - 如何处理重复项
-
好的,再次阅读我认为您需要尝试更仔细地定义它,也许使用更少的字母/列,并准确描述哪些内容会重复,哪些不会重复。你说“当随机选择一对列时,会出现 6 个项目的每个组合。”因此,15 对列中的每一列都必须包含不同字母的
15组合。这并不能真正说明重复是什么,因为一行是否有助于该条件取决于所有其他行! -
首先,这实际上不是 R 或任何其他语言的编程问题。我认为我理解你想要做什么,但这不是编程要为你解决的问题——你实际上需要通过组合来工作。
A B C D E F和A B D E F C是否都有效?正如我之前所理解的那样,它们将是两个有效的组合 - 但正如您现在所解释的那样,它们似乎可能不是。在组合数学方面,第一个位置有 6 个选项,第二个位置有 5 个选项 - 总共 30 个选项。其他任何事情都会重复。
标签: r combinatorics