从结构化文件导入R数据

3

我有一个txt文件,看起来像这样:

年份1: ...
年份2: ...
....
....
[数据]
1,2,3,4
3,4,5
3,5,6,7,8,9
...

所以基本上在[数据]行之前会有n行, 而在数据行下面的是我想要读取的内容。

我知道我可以手动删除标题,但如果我能让R检测到关键字[数据]并读取其后面的内容就更理想了。

还有,正如你所看到的,实际数据每行的变量数量不同。
有没有办法读取它,使得行分隔保留?

2个回答

4
一种做法如下:

一种方法是这样的:

csvAfter <- function(file, marker="[data]", blank.lines.skip=FALSE) {
  lines <- readLines(file)
  i <- match(marker, lines)
  if (is.na(i)) {
    warning("Didn\'t find ", marker)
    return(NULL)
  }
  f <- textConnection(paste(lines[-(1:i)], collapse="\n"))
  on.exit(close(f), add=TRUE)
  return(read.csv(f, header=FALSE, fill=TRUE,
                  blank.lines.skip=blank.lines.skip))
}

例子:

r <- "year 1: ...
year 2: ...
....
....
[data]
1,2,3,4
3,4,5
3,5,6,7,8,9"
print(csvAfter(textConnection(r)))

如果有些行是空白的,而我想将其读入为NA,该怎么办? - user1110653
这对应于read.csv中的blank.lines.skip=FALSE。我已经根据您的要求修改了上面的代码以处理该情况。 - David F

0
上述答案非常棒,可以自动检测到标记“[data]”,使其适用于具有不同行数的输入文件。
如果您只需要这样做一次,可以在调用read.csv或read.table时包含“skip =”。
例如,read.table(file, skip = n)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接