从前几行提取值,然后跳过以读取.txt文件 [英] Extract values from first few lines then skip for reading .txt file
本文介绍了从前几行提取值,然后跳过以读取.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屋!
查看全文