如何用R将DataFrame转为字段-值格式的文本或Markdown文档
实现方法
下面给你两种实现方式,分别用R(基于dplyr)和命令行sed工具:
R语言实现(基于dplyr)
借助dplyr和purrr包,可以轻松遍历数据框的每一行,生成符合要求的Markdown格式内容:
library(dplyr) library(purrr) # 构造示例数据框 mockdf <- data.frame( firstauthor=c("Jane Doe","John Doe", "John Schmoe"), correspauthor=c("John Smith", "Jenny Jay", "Fulano de Tal"), firstaubio=c("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", "Metus dictum at tempor commodo ullamcorper. Laoreet suspendisse interdum consectetur libero id faucibus nisl tincidunt eget."), citations=c(1235, 6424, 3211), stringsAsFactors = FALSE # 避免因子类型导致的格式问题 ) # 生成目标Markdown内容 output_content <- mockdf %>% pmap(function(...) { row_data <- tibble(...) # 把每个字段转换为「**字段名**\n值」的格式 field_lines <- map2_chr(names(row_data), row_data, ~paste0("**", .x, ":**\n", .y)) # 合并当前行的所有字段内容 paste(field_lines, collapse = "\n") }) %>% # 不同行的内容之间用空行分隔 paste(collapse = "\n\n") # 查看结果(输出到控制台) cat(output_content) # 如果需要写入文件,执行下面这行 # writeLines(output_content, "result.md")
运行这段代码后,会输出符合要求的Markdown内容:每个字段名加粗作为子标题,对应的值在下方,不同行的内容之间用空行隔开。
命令行sed实现
如果不想用R,也可以先把数据框导出为文本文件,再用sed命令处理:
步骤1:导出数据框为文本文件
在R里执行以下代码,把数据导出为制表符分隔的纯文本(不含行名和引号):
write.table(mockdf, "input.txt", sep="\t", row.names=FALSE, quote=FALSE)
步骤2:用sed命令生成Markdown格式
在终端中执行以下sed脚本:
sed ' 1 { # 处理第一行表头,保存列名到缓冲区 s/\t/\n/g h d } :loop $! { # 合并所有数据行到一行,字段用制表符分隔 N s/\n/\t/ b loop } s/\t/\n/g # 把所有制表符替换为换行 G # 将保存的表头追加到数据后面 :process # 循环替换成「**字段名**\n值」的格式,每行数据后加空行 s/\(.*\)\n\(.*\)\n\(.*\)\n\(.*\)\n\(.*\)\n\(.*\)\n\(.*\)\n\(.*\)/**\5:**\n\1\n**\6:**\n\2\n**\7:**\n\3\n**\8:**\n\4\n\n/ t process s/\n\n$// # 移除末尾多余的空行 ' input.txt > result.md
执行完成后,result.md文件里就是符合要求的Markdown内容。
内容的提问来源于stack exchange,提问作者Douglas
相关产品推荐
相关产品推荐

