使用R查找提供唯一组合的列的最小组合
我有一个数据框架,大约有2500个命名列,每个列有43个命名行。每行的每个元素都包含该行唯一的两个可能文本值中的一个或一个空白。我想找到最小的列组合,它可以为每行提供唯一的、非空白的异源值对。我最熟悉R,所以最好的解决方案就是这样 要以较小的挑战版本进行说明:使用R查找提供唯一组合的列的最小组合,r,R,我有一个数据框架,大约有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")
> 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
>
这将提供唯一的对:
Pair
R1 ab
R2 ij
R3 pq
R4 xy
我估计我可能能够使用三列或四列实现对的独特组合(已经尝试使用Excel实现了两列)。问题在于,可能的组合数量巨大(如果需要三列,则为数十亿:2500*2500*2500,如果超过三列,则为万亿)。因此,我认为comb()
或expand.grid
不会工作,因为数据帧太大
最后,我认为这个问题可能类似于最短路径类型的优化问题,它可能不容易在合理的计算机时间内解决,但我非常感谢任何帮助。我不清楚您到底在做什么以及为什么要尝试这样做。这么说来,你的例子中有一些不一致的地方,你可能想澄清一下:R4不包含x,你说是C6,然后使用C5,等等……为了给@Dason添加你想要得到的输出是什么?你想知道实际的C1、C4、C5列,还是想得到唯一的对?@Dason,你说得对,更正了。@Eric Watt,最终我唯一感兴趣的是找到一个组合,为所有43行提供唯一的对。我可以很容易地编写蛮力方法(即使在使用Rcpp编译的代码中)但是如果你在寻找一个更好的算法(我同意你需要一个),你需要问一位数学家。
Pair
R1 ab
R2 ij
R3 pq
R4 xy