我正在尝试从工作目录中读取R中的多个文件,并希望读取类似于从第7行读取每个文件。我不知道我该怎么办
我找到了如何阅读单个文件:
data = read.csv(file.choose (), skip = 6 )
或者我可以读取这样的多个文件:
j = list.files()
d = lapply(j, read.csv)
你能帮我解决一下如何从第7行开始读取多个文件?
答案 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
支持进度条(适用于长进程)和并行处理。
请注意:
j
和d
更具描述性的名称。这使代码更易于阅读。