R语言如何生成两个名称集跨组无同组配对组合并转为data.frame
跨集合配对数据框实现方案
你需要的是两个集合的笛卡尔积配对(即所有第一个集合元素和第二个集合元素的两两组合,同集合元素不配对),不要用针对单集合组合的combn,直接用以下方法即可:
基础R实现(无需安装额外包)
用内置函数expand.grid()即可直接生成符合要求的结果,代码如下:
# 示例输入集合 set_1 = c("n1","n2","n3", "n4") set_2 = c("b1", "b2", "b3", "b4") # 生成所有合法跨集合配对 pair_df <- expand.grid( element_set1 = set_1, element_set2 = set_2, stringsAsFactors = FALSE )
运行后输出的pair_df一共16行(两个集合各4个元素,4*4=16种合法配对),所有配对的两个元素分别来自set_1和set_2,完全不会出现同集合元素配对的情况。
tidyverse生态实现
如果日常使用tidyverse系列包,可以用tidyr::crossing()实现完全一致的效果,代码更简洁:
library(tidyr) pair_df <- crossing( element_set1 = set_1, element_set2 = set_2 )
原方法不适用的原因
combn()的设计目标是对单个输入向量做无放回的元素组合,你把两个集合合并为单个向量传入时,函数不会识别元素原本的集合归属,自然无法遵守“同集合元素不能配对”的规则,因此不适合这个场景。
内容的提问来源于stack exchange,提问作者Jeff Henderson
相关产品推荐
相关产品推荐

