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

时间:2012-03-27 13:11:41

标签: r

我正在尝试从工作目录中读取R中的多个文件,并希望读取类似于从第7行读取每个文件。我不知道我该怎么办

我找到了如何阅读单个文件:

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

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

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

你能帮我解决一下如何从第7行开始读取多个文件?

2 个答案:

答案 0 :(得分:6)

将这两者结合起来。您可以将命名参数传递给lapply中的函数:

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

答案 1 :(得分:2)

除了@ James的答案之外,使用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更具描述性的名称。这使代码更易于阅读。
相关问题