从特定行开始读取目录中的多个文件
我想从工作目录中读取R中的多个文件,并且想要阅读像从每个文件的第7行读取的文件。我不知道我怎么能做到这一点从特定行开始读取目录中的多个文件
我发现怎么看这个单独的文件:
data = read.csv(file.choose(), skip = 6)
或者我可以读取多个文件是这样的:
j = list.files()
d = lapply(j, read.csv)
请你帮助我如何从第7行开始读取多个文件?
除了@詹姆斯的回答,用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
支持进度条(适合长时间进程)和并行处理。
注:
- 我喜欢比
j
和d
更具描述性的名称。这使得代码更易于阅读。
这就是解释了很多与我现在的问题! :) – Achak 2012-03-27 14:05:44
只要将两者结合即可。您可以在命名参数传递给函数在lapply
:
d <- lapply(j, read.csv, skip=6)
谢谢,多数民众赞成我的想法,我必须拼写错误,我以前试过,并没有工作,现在工作很好:) – Achak 2012-03-27 13:18:35
从帮助页面,“......可选参数到FUN”。在你的例子中,'read.csv' == FUN,所以你可以在声明FUN之后传递额外的参数,例如'lapply,j,read.csv,skip = 6'。有关更多详细信息,请参阅“lapply”。 – Chase 2012-03-27 13:18:35