从特定行开始读取目录中的多个文件

问题描述:

我想从工作目录中读取R中的多个文件,并且想要阅读像从每个文件的第7行读取的文件。我不知道我怎么能做到这一点从特定行开始读取目录中的多个文件

我发现怎么看这个单独的文件:

data = read.csv(file.choose(), skip = 6) 

或者我可以读取多个文件是这样的:

j = list.files()   
    d = lapply(j, read.csv) 

请你帮助我如何从第7行开始读取多个文件?

+1

从帮助页面,“......可选参数到FUN”。在你的例子中,'read.csv' == FUN,所以你可以在声明FUN之后传递额外的参数,例如'lapply,j,read.csv,skip = 6'。有关更多详细信息,请参阅“lapply”。 – Chase 2012-03-27 13:18:35

除了@詹姆斯的回答,用lapply只读取文件到列表中,而不是到一个共同的data.frame。从你的问题来看,这是不明显的。但为了完整起见,我会加上它。

为了能够识别共同的data.frame最初属于哪一行,我经常添加一个包含文件名的列。在伪代码,这将是这个样子:

files = list.files() 
data_list = lapply(files, function(f) { 
    dat = read.csv(fname, skip = 6) 
    dat$fname = fname 
    return(dat) 
    }) 
data_df = do.call("rbind", data_list) 

或者,你可以使用真棒plyr库,它做同样的事情在:

library(plyr) 
files = list.files() 
data_df = ldply(files, read.csv, skip = 6) 

我没有测试过这个伪代码,所以可能会有一些缺陷。但你有基本的想法。例如,一个问题可能是ldply不会自动将文件名添加为列。然后你需要使用函数调用,就像我使用lapply一样。在这种情况下,ldply可为您节省do.call步骤。请注意,plyr支持进度条(适合长时间进程)和并行处理。

注:

  • 我喜欢比jd更具描述性的名称。这使得代码更易于阅读。
+0

这就是解释了很多与我现在的问题! :) – Achak 2012-03-27 14:05:44

只要将两者结合即可。您可以在命名参数传递给函数在lapply

d <- lapply(j, read.csv, skip=6) 
+0

谢谢,多数民众赞成我的想法,我必须拼写错误,我以前试过,并没有工作,现在工作很好:) – Achak 2012-03-27 13:18:35