如何在R中将表格数据转换为指定结构的结构化文本?
R语言实现方案
基础数据准备
先把示例表格转换成R的数据框:
df <- data.frame( Column_A = c("Project AAA", "Project AAA", "Project AAA", "Project BBB", "Project CCC", "Project CCC"), Column_B = c("Information 1", "Information 2", "Information 3", "Information 4", "Information 5", "Information 6") )
方法1:Base R原生实现
通过分组拆分+文本拼接完成需求,不需要额外包:
# 按父项分组 grouped_data <- split(df$Column_B, df$Column_A) # 生成每个项目的层级文本块 text_blocks <- lapply(names(grouped_data), function(project) { sub_items <- paste0("-", grouped_data[[project]], collapse = "\n") paste(project, sub_items, sep = "\n") }) # 合并所有块,用空行分隔 final_text <- paste(unlist(text_blocks), collapse = "\n\n") # 直接输出结果 cat(final_text) # 导出为TXT文件 writeLines(final_text, "project_info.txt")
方法2:Tidyverse工具链简化
如果常用dplyr和stringr,代码更简洁:
library(dplyr) library(stringr) final_text <- df %>% group_by(Column_A) %>% summarise(sub_content = str_c("-", Column_B, collapse = "\n"), .groups = "drop") %>% mutate(full_block = str_c(Column_A, sub_content, sep = "\n")) %>% pull(full_block) %>% str_c(collapse = "\n\n") # 输出或导出 cat(final_text) writeLines(final_text, "project_info.txt")
非R工具实现方案
1. Excel手动处理
- 第一步:复制Column A列到新列,删除重复值得到唯一父项列表
- 第二步:用数组公式提取对应子项(Excel 365直接回车,旧版本按
Ctrl+Shift+Enter):=TEXTJOIN(CHAR(10), TRUE, IF($A$2:$A$7=D2, "-"&$B$2:$B$7, "")) - 第三步:合并父项和子项:
=D2&CHAR(10)&E2,最后把所有结果复制到记事本即可。
2. Python实现(Pandas)
逻辑和R一致,适合熟悉Python的用户:
import pandas as pd df = pd.DataFrame({ "Column_A": ["Project AAA", "Project AAA", "Project AAA", "Project BBB", "Project CCC", "Project CCC"], "Column_B": ["Information 1", "Information 2", "Information 3", "Information 4", "Information 5", "Information 6"] }) text_blocks = [] for project, group in df.groupby("Column_A"): sub_items = "\n".join(f"-{item}" for item in group["Column_B"]) text_blocks.append(f"{project}\n{sub_items}") final_text = "\n\n".join(text_blocks) # 输出结果 print(final_text) # 保存为TXT with open("project_info.txt", "w", encoding="utf-8") as f: f.write(final_text)
内容的提问来源于stack exchange,提问作者arbuzi
相关产品推荐
相关产品推荐

