В фрагменте кода примените readLines
к вашему Rmd
файлу, чтобы получить строки этого файла в векторе:
allLines <- readLines("yourFile.Rmd")
Выберите строки, которые начинаются и заканчиваются |
, и удалите вторую (которая является разделительной линией "|-----|-----|"
):
tableLines <- allLines[grep("^\\|.*\\|$", allLines)][-2]
Затем с помощью приведенного ниже кода вы получите таблицу в виде матрицы, первая строка которой содержит имена столбцов:
tableAsMatrix <- t(sapply(strsplit(tableLines, "\\|"), function(pieces){
stringr::str_trim(pieces[-1])
}))
Наконец, преобразуйте эту матрицу, лишенную ее первой строки, в фрейм данных и используйте ее первую строку для установки имен столбцов:
setNames(as.data.frame(tableAsMatrix[-1,,drop = FALSE]), tableAsMatrix[1,])
Полный код
---
title: "Parse tables"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(message = FALSE, warning = FALSE)
```
# Step 1: Create markdown table as text
That table will be manually updated directly in the markdown file.
Table: Project Timeline
| date | description |
|------------|-------------|
| 2020-05-11 | Milestone 1 |
| 2020-07-11 | Milestone 2 |
| 2020-07-20 | Milestone 3 |
# Step 2: Parse the table above
The table should be maintained as a markdown table. How can I read the table from the code chunk?
```{r}
allLines <- readLines("ParseTable.Rmd")
tableLines <- allLines[grep("^\\|.*\\|$", allLines)][-2]
tableAsMatrix <- t(sapply(strsplit(tableLines, "\\|"), function(pieces){
stringr::str_trim(pieces[-1])
}))
df <- setNames(as.data.frame(tableAsMatrix[-1,,drop = FALSE]), tableAsMatrix[1,])
df
```
введите описание изображения здесь