我有一个水平衡文本文件,该文件不需要进行前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)
如果有人有建议,那么我将非常感谢您的帮助。
答案 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