我有一个包含大约2500个命名列的数据框,每个列有43个命名行。每行的每个元素包含该行唯一的两个可能的文本值之一,或一个空白。我想找到最小的列组合,它会给我一行独特的非空白异源值。我对R最熟悉,所以解决方案就是最好的。
以简易版本的挑战来说明:
> l <- data.frame(C1 = c("a","i","","y"), C2 = c("b","i","q","x"), C3 = c("b","","p",""), C4 = c("b","j","q","y"), C5 = c("a","","p",""), C6 = c("b","i","q","x"))
> l
C1 C2 C3 C4 C5 C6
R1 a b b b a b
R2 i i j i
R3 q p q p q
R4 y x y x x
>
唯一列的最小组合将是:C1, C4, C5
:
C1 C4 C5
R1 a b a
R2 i j
R3 q p
R4 y y x
>
这将给出唯一的对:
Pair
R1 ab
R2 ij
R3 pq
R4 xy
我估计我可以使用三列或四列(使用Excel已经尝试过两次)来实现对的唯一组合。问题是可能的组合数量很大(如果需要三列,则需要数十亿:2500 * 2500 * 2500,超过三列的数万亿)。因此,我认为comb()
或expand.grid
无法正常工作,因为数据框架太大了。
最后,我认为这个问题可能类似于最短路径类型的优化问题,在合理的计算机时间内解决可能并不容易,但我会非常感谢任何帮助。