从前几行提取值,然后跳过以读取.txt文件 [英] Extract values from first few lines then skip for reading .txt file

查看:0
本文介绍了从前几行提取值,然后跳过以读取.txt文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有两个文件,file1.txt和file2.txt,如下所示:

file1.txt

blablabla
lorem ipsum
year: 2007
Jan Feb Mar 
1   2   3
4   5   6

file2.txt

blablabla
lorem ipsum
year: 2008
Jan Feb Mar 
7   8   9
10  11  12
我可以使用purrr::map_df(read_table,skip=3)读取这些文件 但我想要做的是从每个文件中提取年份,并将其分配到新的年份列中,这样我的最终数据框就会如下所示:

Jan Feb Mar Year
1   2   3   2007
4   5   6   2007
7   8   9   2008
10  11  12  2008

我希望先使用readr::read_lines,然后使用readr::read_table,但不知道具体如何操作。

推荐答案

Base R通过readLines

实现流连接
f <- function(path) {
    ## Open connection and close on exit
    zzz <- file(path, open = "rt")
    on.exit(close(zzz))
    ## Read first three lines into character vector and extract year
    y <- as.integer(gsub("\D", "", readLines(zzz, n = 3L)[3L]))
    ## Read remaining lines into data frame
    d <- read.table(zzz, header = TRUE)
    d$Year <- y
    d
}

nms <- c("file1.txt", "file2.txt")
do.call(rbind, lapply(nms, f))
  Jan Feb Mar Year
1   1   2   3 2007
2   4   5   6 2007
3   7   8   9 2008
4  10  11  12 2008

我不清楚readr是否有此功能:

library("readr")
zzz <- file("file1.txt", open = "rb")

read_lines(zzz, skip = 2L, n_max = 1L)
## [1] "year: 2007"

read_table(zzz)
## # A tibble: 0 × 0

close(zzz)

尽管我们只向file1.txt的第三行请求read_lines,但它似乎(不可见地)读取了所有行,没有为read_table留下任何内容。

另一方面,thisGitHub问题是在去年修复的,所以在readr的最新发布版本中没有看到对流连接的支持是很奇怪的。也许我错过了什么.?

这篇关于从前几行提取值,然后跳过以读取.txt文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆