【发布时间】:2020-09-30 15:03:03
【问题描述】:
我在“C:\Data”中有 200 个 CSV 数据文件(它们的名称是 xxx.csv)。我想将所有这些 csv 文件转换为 RData 文件。但是,它们每个都很大,我无法将它们全部读入 R。
如何将这些文件读入 R,保存到 RData 文件,然后使用函数将它们从 R 环境中一一删除?
【问题讨论】:
标签: r
我在“C:\Data”中有 200 个 CSV 数据文件(它们的名称是 xxx.csv)。我想将所有这些 csv 文件转换为 RData 文件。但是,它们每个都很大,我无法将它们全部读入 R。
如何将这些文件读入 R,保存到 RData 文件,然后使用函数将它们从 R 环境中一一删除?
【问题讨论】:
标签: r
试试这个:
csv2rdata <- function(filename) {
nm <- sub("\\.csv$", "", basename(filename))
assign(nm, data.table::fread(filename), envir = environment())
save(list = nm, file = paste0(dirname(filename), "/", nm, ".RData"), envir = environment())
}
dir("C:\\Data", pattern = "*.csv", full.names = TRUE) %>% lapply(csv2rdata)
【讨论】:
我会尝试以下方法,假设您已经有一个包含文件名的列表:
library(data.table)
for (i in 1:length(my_files)) {
df <- fread(myfiles[i])
save(df, ....) # use your specification for saving including the filename
}
【讨论】:
using this link。您可以使用data.table 包来读取大量数据。请记住,R 用于内存处理,因此如果您有大约 5GB-10GB 的大数据,则需要一点硬件。然后您可以将它们保存为 .RData 文件,然后在循环中使用 rm() 将它们删除。
library(data.table)
library(tidyverse)
tbl_fread <-
list.files(pattern = "*.csv") %>%
map_df(~fread(.))
【讨论】:
map_df 是来自 purrr 的 map_dfr 的无证别名。它还需要安装dplyr。
list.files(pattern = "*.csv") 不会仅列出相应目录中的所有文件,然后您将在函数/循环中逐一读取它们