gpt4 book ai didi

r - Markdown表到R中的数据框

转载 作者:行者123 更新时间:2023-12-01 08:48:55 25 4
gpt4 key购买 nike

有很多方法可以将数据帧转换为Markdown表。
但是在给定Markdown表的情况下,如何将其转换回数据框

给定一个表格表格:

Table Header | Second Header
------------- | -------------
Table Cell | Cell 2
Cell 3 | Cell 4

或者,甚至更糟的是,
Table Header | Second Header \n------------- | ------------- \nTable Cell | Cell 2 \nCell 3 | Cell 4 

如何将其放入数据帧?

最佳答案

我写了几个函数来处理这些问题,尽管我怀疑这对写SO答案的人比其他人来说更成问题。而不管:

# base R version
read.markdown <- function(file, stringsAsFactors = FALSE, strip.white = TRUE, ...){
if (length(file) > 1) {
lines <- file
} else if (grepl('\n', file)) {
con <- textConnection(file)
lines <- readLines(con)
close(con)
} else {
lines <- readLines(file)
}
lines <- lines[!grepl('^[[:blank:]+-=:_|]*$', lines)]
lines <- gsub('(^\\s*?\\|)|(\\|\\s*?$)', '', lines)
read.delim(text = paste(lines, collapse = '\n'), sep = '|',
stringsAsFactors = stringsAsFactors, strip.white = strip.white, ...)
}

# readr version
read_markdown <- function(file, trim_ws = TRUE, ...){
if (length(file) > 1) {
lines <- file
} else {
lines <- readr::read_lines(file)
}
lines <- lines[!grepl('^[[:blank:]+-=:_|]*$', lines)]
lines <- gsub('(^\\s*?\\|)|(\\|\\s*?$)', '', lines)
readr::read_delim(paste(lines, collapse = '\n'), delim = '|',
trim_ws = trim_ws, ...)
}

他们可以处理Markdown表的许多变体,并且对单个字符串感到满意:

read.markdown('Table Header | Second Header \n------------- | ------------- \nTable Cell | Cell 2 \nCell 3 | Cell 4 ')
#> Table.Header Second.Header
#> 1 Table Cell Cell 2
#> 2 Cell 3 Cell 4

线的向量(就像从 clipr::read_clip中得到的一样):

clipr::write_clip(
' | | mpg | cyl | disp | hp |
|:-------------------:|:-----:|:-----:|:------:|:----:|
| Mazda RX4 | 21 | 6 | 160 | 110 |
| Mazda RX4 Wag | 21 | 6 | 160 | 110 |
| Datsun 710 | 22.8 | 4 | 108 | 93 |'
)

read.markdown(clipr::read_clip())
#> X mpg cyl disp hp
#> 1 Mazda RX4 21.0 6 160 110
#> 2 Mazda RX4 Wag 21.0 6 160 110
#> 3 Datsun 710 22.8 4 108 93

或文件名(尽管文件只能包含表和空格):

tmp <- tempfile()
writeLines(
' +---------------------+-------+-------+--------+------+--------+
| | mpg | cyl | disp | hp | drat |
+=====================+=======+=======+========+======+========+
| Mazda RX4 | 21 | 6 | 160 | 110 | 3.9 |
+---------------------+-------+-------+--------+------+--------+
| Mazda RX4 Wag | 21 | 6 | 160 | 110 | 3.9 |
+---------------------+-------+-------+--------+------+--------+
| Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 |
+---------------------+-------+-------+--------+------+--------+',
tmp
)

read_markdown(tmp)
#> Warning: Missing column names filled in: 'X1' [1]
#> # A tibble: 3 x 6
#> X1 mpg cyl disp hp drat
#> <chr> <dbl> <int> <int> <int> <dbl>
#> 1 Mazda RX4 21.0 6 160 110 3.90
#> 2 Mazda RX4 Wag 21.0 6 160 110 3.90
#> 3 Datsun 710 22.8 4 108 93 3.85

编辑:如果有人发现它们有用,我将它们放在 a package中。

关于r - Markdown表到R中的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48087762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com