如何在Quarto中遍历DataFrame生成目录结构
解决方法
要让Quarto识别R代码生成的标题结构,核心是在R输出中直接写入Markdown标题语法(# 对应一级标题,## 对应二级标题),并通过cat()输出纯文本,让Quarto自动解析这些标记。
步骤1:数据去重(可选)
如果原数据df_full存在同一主题下重复的question_id,先做去重处理,避免生成重复内容:
library(dplyr) # 保留每个Topic+question_id的唯一response df_unique <- df_full %>% distinct(Topic, question_id, .keep_all = TRUE)
步骤2:编写R代码生成结构化内容
在Quarto文档中插入以下代码块,设置echo=FALSE隐藏R代码,只渲染生成的标题和内容:
--- title: "主题化问答内容" format: html # 可根据需求改为pdf/docx --- ```{r, echo=FALSE} # 遍历每个唯一主题 for (topic in unique(df_unique$Topic)) { # 输出一级标题(Markdown语法:# 标题) cat(paste0("# ", topic, "\n\n")) # 筛选当前主题下的问题数据 current_topic_data <- subset(df_unique, Topic == topic) # 遍历当前主题的每个问题 for (row in seq(nrow(current_topic_data))) { # 输出二级标题(Markdown语法:## 标题) cat(paste0("## ", current_topic_data$question_id[row], "\n\n")) # 输出对应回答内容 cat(paste0(current_topic_data$response[row], "\n\n")) } }
#### 关键注意点 - 用`cat()`输出:`print()`会附带R控制台的额外格式,Quarto无法正确解析;`cat()`直接输出纯文本,符合Markdown渲染要求。 - 标题后加`\n\n`:Markdown需要空行分隔不同块元素(标题、段落),否则会被识别为同一行内容。 内容的提问来源于stack exchange,提问作者T1802173
相关产品推荐
相关产品推荐

