如何从文本文件中读取某些行,而忽略使用R之间的几行(还将这些行分隔为列)?

时间:2019-07-24 03:28:37

标签: r read.table readlines

我有一个水平衡文本文件,该文件不需要进行前20行分析。然后,我有一个要保留的列名行,再有一个包含单位和连字符的行,我想忽略。然后,我在列名之后有想要获取的数据。列名称行之前有17行不必要的数据,文件通常如下所示:

Unnecessary lines
Unnecessary lines
Unnecessary lines
Unnecessary lines
Unnecessary lines
Unnecessary lines
---------------------------------------
Colomn_names Colomn_names Colomn_names
unit         unit         unit
---------------------------------------
Data Data Data
Data Data Data
Data Data Data
Data Data Data

首先,我认为我会使用read。表格并跳过列名称上方的行,只是删除下面带有连字符的行,但始终会收到一个称为“扫描错误”的错误(文件=文件,什么=内容,sep = sep,引用=引用,dec = dec,   第1行没有20个元素”

到目前为止,我已经尝试过:

data1 <- read.table("2_wat.txt", skip = 17, sep = '\t')

如果执行以下操作,我会得到数据,但会丢失列名

data1 <- read.table("2_wat.txt", skip = 22)

如果有人有建议,那么我将非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

一种简单的方法是像这样设置每只手的列名

data1 <- read.table("2_wat.txt", skip = 22, col.names=c("col1", "col2", "col3"))

或者您阅读两次。一旦标头和另一个像这样的数据:

tt <- read.table("2_wat.txt", skip = 17, sep = '\t', nrows=1, as.is = TRUE)
data1 <- read.table("2_wat.txt", skip = 22)
colnames(data1)  <- tt

答案 1 :(得分:0)

使用readLines将所有行读取为字符向量应该更容易。

然后您可以分别对待每个元素。

# preapare data
txt_path <- tempfile(fileext = "txt")
con <- file(txt_path)
txt <-"Unnecessary lines
Unnecessary lines
Unnecessary lines
Unnecessary lines
Unnecessary lines
Unnecessary lines
---------------------------------------
Colomn_names Colomn_names Colomn_names
unit         unit         unit
---------------------------------------
Data Data Data
Data Data Data
Data Data Data
Data Data Data"
writeLines(txt, con)
close(con)

# read txt file line by line, it returns a vector of characters
txt_vec <- readLines(con = txt_path)

headers <- unlist(strsplit(txt_vec[8]," "))

out <- as.data.frame(strsplit(txt_vec[11:14]," "),col.names = headers)
> print(out)
  Colomn_names Colomn_names.1 Colomn_names.2  NA.
1         Data           Data           Data Data
2         Data           Data           Data Data
3         Data           Data           Data Data