R语言如何实现两个向量所有distinct值的交叉拼接?
R 实现向量元素全组合拼接的解决方案
你当前使用paste0(c("A","B"),c("A1", "B1"))仅得到2个拼接结果,是因为R中长度相等的向量传入paste0时,默认执行对位拼接逻辑:仅将两个向量相同索引位置的元素一一配对拼接,不会生成全排列组合。
你可以通过以下几种方式实现需求:
方法1:使用outer函数(最简洁)
outer函数原生支持两个输入向量的全组合运算,直接指定运算函数为paste0即可:
res <- as.vector(outer(c("A","B"), c("A1", "B1"), paste0)) # 如需匹配你期望的输出顺序,加sort即可 res <- sort(res)
运行后res的输出为:[1] "AA1" "AB1" "BA1" "BB1"
方法2:使用expand.grid生成笛卡尔积后拼接
先通过expand.grid生成两个向量的全组合数据框,再按行拼接每一行的两个元素:
res <- apply(expand.grid(c("A","B"), c("A1", "B1")), 1, paste0, collapse = "") res <- sort(res)
方法3:tidyverse 生态实现
如果你习惯使用tidyverse系列工具,可以用crossing生成全组合后拼接:
library(tidyr) library(dplyr) res <- crossing(v1 = c("A","B"), v2 = c("A1","B1")) %>% mutate(res = paste0(v1, v2)) %>% pull(res)
内容的提问来源于stack exchange,提问作者manu p
相关产品推荐
相关产品推荐

