如何根据 R 中的原始文件名将包含多个数据帧的大列表保存为单个 csv
Posted
技术标签:
【中文标题】如何根据 R 中的原始文件名将包含多个数据帧的大列表保存为单个 csv【英文标题】:How to save a large list containing multiple dataframes as individual csvs based on original file names in R 【发布时间】:2021-12-30 00:38:21 【问题描述】:我已从文件夹中读取文件列表:
files <- list.files("E:new data/Depth and Temp")
allFiles.list <- lapply(files, read.table, sep = '\t')
然后将一组函数应用于已读取的文件,这些文件工作正常:
load_file <- function(files)
tab_file <- read.table(files, header = TRUE)
tab_file$Date.Time <- as_datetime(tab_file$Time)
tab_file$Date.Time <- tab_file$Date.Time + hours(9)
setnames(tab_file, old = c('External.Temperature','Corrected.Depth.Channel'), new = c('Temp','Depth'))
tab_file
list_of_files = list.files(pattern="*.tab")
data <- lapply(X = list_of_files, FUN = load_file)
我现在有一个包含单个文件作为 R 中数据框的大列表:
但我很难将它们保存为新文件。我希望新文件与以前的文件同名,但另存为 csv。
例如当前名称:
144881.tab
144883_2.tab
156889.tab
156889_2.tab
我希望它们保存为:
144881.csv
144883_2.csv
156889.csv
156889_2.csv
我认为这会相对简单(我确信确实如此),但经过几个小时的互联网搜索后,我仍然无法找到我要查找的内容。
注意:我只提供了我的数据的一个小屏幕截图(带有 2 个示例),但我在这个文件夹中有超过 25 个文件,所以我希望使用以前的文件名以避免手动重新输入它们。提前谢谢!
【问题讨论】:
【参考方案1】:你可以试试:
filenames <- list.files(pattern="*.tab")
file_prefix <- filenames |> stringr::str_extract("[:graph:]1,1000(?=\\.)")
names(data) <- file_prefix
file_prefix |> purrr::map(~write.csv(x = data[[.x]], file = paste0(.x, ".csv")))
如果您有旧版本的 R,您可以使用 magrittrs %>%
而不是 |>
。
【讨论】:
您好,有一个小警告:打印出文件名为 2 而不是 144883_2 的下划线 2 (144883_2.tab) 的文件。任何想法如何解决这个问题? 嗨,我修正了我的答案:stringr::str_extract(...)
只查找字符和数字,而不是特殊字符。
太棒了!工作完美。谢谢你:)以上是关于如何根据 R 中的原始文件名将包含多个数据帧的大列表保存为单个 csv的主要内容,如果未能解决你的问题,请参考以下文章
根据文件名将目录中的多个 .xlsx 文件读取到单独的 Pandas 数据框中
bat批处理,根据清单中的文件名将多个文件移动到另外一个路径下,如何批量处理?非常感谢!
根据文件名将 Google Cloud 存储桶中的多个文件复制到不同的目录