如何在R语言中生成两向量所有元素组合的拼接字符串?
解决R中生成两个向量所有组合拼接字符串的问题
这问题我太熟悉了!你想要的是两个向量的笛卡尔积拼接结果——也就是每个部门编号和每个单位标识都配对一次,下面给你两种简单高效的解决方法:
方法1:用expand.grid + paste拼接
expand.grid已经帮你生成了所有组合,只需要多一步把两列拼接成单个字符串就行:
departments <- c(1, 2, 9, 10) units <- c("A", "B", "C", "F", "I", "O", "V") # 生成所有组合的数据框 df <- expand.grid(departments, units) # 把两列拼接成新的字符串列 df$combined <- paste(df$Var1, df$Var2, sep = "") # 转成你需要的列表格式 depUn_list <- as.list(df$combined) # 如果需要向量格式直接用: # depUn_vec <- df$combined
运行后depUn_list就会包含所有像"1A"、"2A"、"9A"、"10A"、"1B"这样的组合,顺序是先固定单位为"A"遍历所有部门,再到"B",以此类推。
方法2:用outer函数一步到位
outer函数专门用来生成两个向量的笛卡尔积操作,配合paste可以直接得到结果,代码更简洁:
departments <- c(1, 2, 9, 10) units <- c("A", "B", "C", "F", "I", "O", "V") # 生成拼接后的向量,再转成列表 depUn_vec <- as.vector(outer(departments, units, paste, sep = "")) depUn_list <- as.list(depUn_vec)
outer会自动把departments的每个元素和units的每个元素配对,用paste拼接后返回一个矩阵,as.vector把矩阵转成一维向量,再转成列表就搞定了。
为什么你之前的方法不行?
- 直接用
paste(departments, units, sep = "")时,R只会按位置一一对应拼接(第1个部门配第1个单位,第2个部门配第2个单位),所以得不到所有组合; expand.grid虽然生成了所有组合,但你没有对每行的两个元素做拼接操作,所以得到的是分开的两个值。
内容的提问来源于stack exchange,提问作者Nordsted
相关产品推荐
相关产品推荐

