如何在R语言中生成侧边字符串拼接至中心串两端的全组合结果
解决方案
方法1:基础R实现(无需安装第三方包)
直接用expand.grid生成左右元素的全组合,再拼接字符串即可,适配任意长度的sides、任意长度的成员字符串:
# 定义原始变量 center <- "XXXXXXX" sides <- c("aa", "bb", "cc") # 生成所有左右组合 comb_df <- expand.grid(left = sides, right = sides, stringsAsFactors = FALSE) # 拼接得到所有结果字符串 all_res <- paste0(comb_df$left, center, comb_df$right) # 如需和示例格式一致,按左元素分组带空行输出 for (cur_left in sides) { cur_group <- all_res[comb_df$left == cur_left] cat(paste(cur_group, collapse = "\n"), "\n\n") }
运行后输出和你给出的预期结果完全一致。
方法2:tidyverse风格实现
如果你习惯用tidyverse语法,可以用tidyr::crossing生成全组合,代码更简洁:
library(tidyr) library(dplyr) center <- "XXXXXXX" sides <- c("aa", "bb", "cc") all_res <- crossing(left = sides, right = sides) %>% mutate(full_str = paste0(left, center, right)) %>% pull(full_str) # 同样可以按规则打印输出 group_walk(group_by(crossing(left = sides, right = sides), left), ~ cat(paste0(.x$left, center, .x$right, collapse = "\n"), "\n\n"))
两种方法的核心逻辑都是生成sides元素的两两全组合,再和中间字符串拼接,不管sides有多少个成员、成员字符串长度是多少都能正常运行。
内容的提问来源于stack exchange,提问作者littleworth
相关产品推荐
相关产品推荐

