R语言循环中拼接glue字符串输出不符合预期该如何解决?
问题根源
glue_data()会对输入数据框的每一行生成一个对应字符串,返回和行数等长的字符串向量。你当前代码中直接将长度为1的code_A和长度为3的code_B传入paste()拼接时,R会自动循环补齐短向量,导致每个code_A被重复3次,最终输出就出现了你遇到的按列B取值分组重复列A标题的问题。
解决方法
在拼接前先将code_B的多个字符串折叠为单个长字符串即可,修改后代码如下:
#Reproduible example #sample dataframe library(dplyr) library(glue) col_A <- rep(c("one","two", "three", "four") ,each = 3) col_B <- rep(c("yes", "No", "Maybe"),times = 4) df <- bind_cols(a = col_A, b = col_B) glucode_combined <- "" # Initialize empty string # the loop over values to create a flexdashboard for (i in unique(df$a)){ code_A <- glue( "{i} \n", "======================================================================= \n", ) code_B <- df %>% filter(a == i) %>% arrange(b) %>% glue_data( "------------------------------------- \n", "> ColumnA: {a} | ColumnB: {b} \n", "------------------------------------- \n", " \n", ) %>% paste(collapse = "\n") # 新增折叠代码,把对应列A的所有列B分块拼成单个字符串 glucode_combined <- paste(glucode_combined, code_A, code_B, sep = "\n") } writeLines(glucode_combined,"glucode_combined.txt")
修改后运行代码即可得到你预期的输出格式:每个列A的唯一值仅输出一次标题,后面紧跟该值对应的所有列B的分块内容。
内容的提问来源于stack exchange,提问作者ok1more
相关产品推荐
相关产品推荐

