R:导入相同格式的数据,做一个对应原文件名的列,垂直拼接?

R: import identically formatted data, make a column corresponding to the original filename, vertically concatenate?

我正在使用部署在不同深度的一些海洋传感器。每个传感器记录了不同深度的几个参数(时间、温度、氧气),每个传感器都输出了一个相同格式的文件,我将其重命名为 'top.csv', 'mid.csv', bot.csv'(顶部、中部、底部)。

我目前只有三个文件,但最终会有更多,所以我想反复设置它。最理想的是,我会设置一些东西:

  1. R 将从指定目录导入所有 csv 文件
  2. 它会在每个名为 "depth" 的数据框中添加一列,其中包含原始文件的名称。
  3. r将它们绑定到一个数据框中。

我可以使用下面的两行代码完成第 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 处理此类数据会更容易吗?谢谢!

您可以通过构建自己的函数来完成此操作:

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.callrbind 添加文件。

res <- do.call(rbind, myList)