我正在使用部署在不同深度的一些海洋传感器。每个传感器记录了不同深度的几个参数(时间,温度,氧气),每个传感器输出一个格式相同的文件,我已将其重命名为'top.csv', 'mid.csv', bot.csv'
(顶部,中部,底部)。
我目前只有三个文件,但最终会有更多文件,所以我想迭代地设置它。最好我会设置一些东西:
我可以使用以下两行执行步骤1和3。第一行从与模式匹配的特定目录中获取文件名,而第二行使用在do.call中嵌套的lapply来读取所有文件并垂直连接。
files = list.files('./data/', pattern="*.csv")
oxygenData= do.call(rbind, lapply(files, function(x) read.csv(paste('./data/',x)))
最终获得单个数据文件的理由是更容易绘制它们,如下:
ggplot(data = oxygenData, aes(x = time, y = oxygen, group = depth, color = depth))+geom_line()
另外,使用data.table可以更轻松地处理这类数据吗?谢谢!
答案 0 :(得分:1)
您可以通过构建自己的功能来实现这一目标:
myFunc <- function(fileName) {
# read in file
temp <- read.csv(paste0("<filePath>/", fileName), as.is=TRUE)
# assign file name
temp$fileName <- fileName
# return data.frame
temp
}
请注意,您可以通过添加第二个带有文件路径的参数来概括myFunc
,从而允许动态设置目录。接下来,将其放入lapply
以获取data.frames列表:
myList <- lapply(fileNameVector, myFunc)
最后,使用do.call
和rbind
附加文件。
res <- do.call(rbind, myList)