我想使用R read.table函数将文件数据加载到data.frame中。数据由制表符分隔,没有丢失的条目。不幸的是,我的数据之前的前导行数会有所不同。我可以很容易地将Java / C / Perl解决方案组合在一起。但是,我在R中不太确定。文件内容(在缩小的模型中)如下所示:
##header stuff
##header stuff
##header stuff
#column names column names column names
data data data data data data
data data data data data data
data data data data data data
...
data data data data data data
我希望read.table包括“ #column names列名列名”行作为data.frame的列标题。
我可以手动关闭文件顶部并从标题中删除“#”;但是,我计划将其自动化处理数百个文件。
修改 文件中的标题信息也可以以@或!开头。
谢谢
答案 0 :(得分:2)
这应该可以帮助您:
readLines
逐行读取。
grep
查找以 #
或@
或!
或任何标点符号[:punct:]
max
index是包含列名和gsub
的行,该行将在拆分成列字符向量之前删除punctuation's
如果您不确定要跳过的行是否包含#
,这是 read.table 注释字符。 >。最好跳过直到非数据列(即包含标题行的max
)
log <- readLines("your_file")
column_heading_idx <- max(grep(log, pattern = "^[[:punct:]]")) # index for header row
col_names <- gsub("[[:punct:]]", "", log[column_heading_idx]) # removed any punctuation
col_name_vec <- unlist(strsplit(col_names, split = " ")) # split into character vector
read.table("your_file", col.names = col_name_vec,
skip = column_heading_idx, comment.char = "") # turned off character chr
# column names column.1 names.1 column.2 names.2
# 1 data data data data data data
# 2 data data data data data data
# 3 data data data data data data
使用的数据:
writeLines("your_file", text = "##header stuff
##@header stuff
##@!header stuff
#@column names column names column names
data data data data data data
data data data data data data
data data data data data data")