R:导入格式相同的数据,创建一个与原始文件名对应的列,垂直连接?

时间:2016-06-09 17:26:58

标签: r dataframe rbind

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

我目前只有三个文件,但最终会有更多文件,所以我想迭代地设置它。最好我会设置一些东西:

  1. R将导入指定目录中的所有csv文件
  2. 它将为每个名为“depth”的数据框添加一列,其中包含原始文件的名称。
  3. 将它们绑定到一个数据框中。
  4. 我可以使用以下两行执行步骤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可以更轻松地处理这类数据吗?谢谢!

1 个答案:

答案 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.callrbind附加文件。

res <- do.call(rbind, myList)