R:导入相同格式的数据,做一个对应原文件名的列,垂直拼接?
R: import identically formatted data, make a column corresponding to the original filename, vertically concatenate?
我正在使用部署在不同深度的一些海洋传感器。每个传感器记录了不同深度的几个参数(时间、温度、氧气),每个传感器都输出了一个相同格式的文件,我将其重命名为 'top.csv', 'mid.csv', bot.csv'
(顶部、中部、底部)。
我目前只有三个文件,但最终会有更多,所以我想反复设置它。最理想的是,我会设置一些东西:
- R 将从指定目录导入所有 csv 文件
- 它会在每个名为 "depth" 的数据框中添加一列,其中包含原始文件的名称。
- 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.call
和 rbind
添加文件。
res <- do.call(rbind, myList)
我正在使用部署在不同深度的一些海洋传感器。每个传感器记录了不同深度的几个参数(时间、温度、氧气),每个传感器都输出了一个相同格式的文件,我将其重命名为 'top.csv', 'mid.csv', bot.csv'
(顶部、中部、底部)。
我目前只有三个文件,但最终会有更多,所以我想反复设置它。最理想的是,我会设置一些东西:
- R 将从指定目录导入所有 csv 文件
- 它会在每个名为 "depth" 的数据框中添加一列,其中包含原始文件的名称。
- 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.call
和 rbind
添加文件。
res <- do.call(rbind, myList)