在R语言中实现字符串(chr)向量的笛卡尔积拼接
解决R语言中两个字符向量的笛卡尔积拼接问题
嘿,刚学R的话碰到这种组合拼接的需求太正常啦!你想要的其实是两个向量的笛卡尔积拼接——也就是让a里的每个元素都和b里的所有元素逐一组合,最后得到一个长度为length(a)*length(b)的向量。之前用merge确实不太对路,因为merge是做匹配合并的,不是生成这种全组合的,我给你两个简单直接的方法,完全符合你要的顺序:
方法1:用outer() + paste0()(调整顺序版)
outer()函数天生就是用来生成两个向量的两两组合结果的,搭配无分隔符拼接的paste0()就能得到所有拼接后的内容。不过默认的矩阵读取顺序是按列来的,我们需要转置一下矩阵再转成向量,就能得到你要的「先固定a的元素,遍历所有b元素」的顺序:
a <- c("3","5","7","X") b <- c("A","B","C","D","E") # 生成符合顺序的拼接向量 result <- as.vector(t(outer(a, b, paste0))) # 查看结果 result
运行后输出就是你想要的样子:
[1] "3A" "3B" "3C" "3D" "3E" "5A" "5B" "5C" "5D" "5E" "7A" "7B" "7C" "7D" "7E" "XA" "XB" "XC" "XD" "XE"
方法2:用expand.grid()生成组合后拼接(更直观)
这个方法对新手来说可能更容易理解:先通过expand.grid()生成所有a和b的组合数据框,再把两列字符串拼接起来,得到的向量顺序完全符合你的要求:
# 生成所有组合的数据框 comb_df <- expand.grid(a = a, b = b, stringsAsFactors = FALSE) # 拼接两列得到目标向量 result2 <- paste0(comb_df$a, comb_df$b) # 查看结果 result2
expand.grid()会自动按「先固定a的每个元素,遍历所有b元素」的顺序生成组合,所以拼接后的向量正好是你需要的格式。
这两个方法都能快速得到你想要的单个向量,不用再处理merge生成的数据框啦~
内容的提问来源于stack exchange,提问作者thymaro
相关产品推荐
相关产品推荐

