Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从不同文件夹导入文件,添加从每个文件名中提取值的列?_R_Dataframe_Merge_Data Analysis_Fread - Fatal编程技术网

R 从不同文件夹导入文件,添加从每个文件名中提取值的列?

R 从不同文件夹导入文件,添加从每个文件名中提取值的列?,r,dataframe,merge,data-analysis,fread,R,Dataframe,Merge,Data Analysis,Fread,我正在和R一起做一些数据分析。我将数据保存在不同的文件夹中,这些文件夹与数据的来源年份有关。在每个年度文件夹中有几个类别文件夹,每个类别文件夹都有需要导入的.csv和.dat文件。文件名的结构类似于“category_outlet_timeinterval.csv”或“.dat”。每年包含相同的类别,每个类别包含相同类型的文件,只是时间间隔不同 我需要从几个不同的文件夹导入这些文件,并为年份、类别和出口添加一列。要进入这些列的值需要从每个文件名中读取。添加列后,文件将合并到单个数据帧中 我已经用

我正在和R一起做一些数据分析。我将数据保存在不同的文件夹中,这些文件夹与数据的来源年份有关。在每个年度文件夹中有几个类别文件夹,每个类别文件夹都有需要导入的.csv和.dat文件。文件名的结构类似于“category_outlet_timeinterval.csv”或“.dat”。每年包含相同的类别,每个类别包含相同类型的文件,只是时间间隔不同

我需要从几个不同的文件夹导入这些文件,并为年份、类别和出口添加一列。要进入这些列的值需要从每个文件名中读取。添加列后,文件将合并到单个数据帧中

我已经用fread完成了合并部分:

# (1) Create File List
csv_files <- list.files (path       = "R/win-library/Practice", 
                         pattern    = "*.csv",
                         recursive  = T,
                         full.names = T)

# (2) Import All csv with 'fread()'
DATA_ALL <- rbindlist (lapply (csv_files, fread))
view(DATA_ALL)
#(1)创建文件列表

csv_文件您可以在数据框中创建包含路径和文件名信息的列:

files <- list.files(path = path,
                    full.names = TRUE,
                    all.files = FALSE,
                    recursive = TRUE)
files <- files[!file.info(files)$isdir]

data <- lapply(files,
               function(x) {
                 data <- read_xls(x, sheet = 1)
                 data$File_name <- basename(x)
                 data$Path <- dirname(x)
                 data
                 })

文件您可以在数据框中创建包含路径和文件名信息的列:

files <- list.files(path = path,
                    full.names = TRUE,
                    all.files = FALSE,
                    recursive = TRUE)
files <- files[!file.info(files)$isdir]

data <- lapply(files,
               function(x) {
                 data <- read_xls(x, sheet = 1)
                 data$File_name <- basename(x)
                 data$Path <- dirname(x)
                 data
                 })

文件我喜欢这个主意!这比我想的要简单。你能一步一步地简单解释一下代码吗?我对什么文件
列表有些迷茫。文件
返回目标文件夹中的文件和目录
file.info()$isdir
返回一个布尔向量,告诉您哪些对象是目录<代码>
是逻辑求反函数。在
files[!file.info(files)$isdir]
中,我们对
文件
向量进行子集,并删除作为目录的元素。剩下的向量只包含文件。对象
数据
是一个
列表
,只要作为列表元素的数据帧具有相同的列,就可以使用
dpyr的
bind_rows
函数将它们绑定在一起。在R有很多方法可以做到这一点。我喜欢这个想法!这比我想的要简单。你能一步一步地简单解释一下代码吗?我对什么文件
列表有些迷茫。文件
返回目标文件夹中的文件和目录
file.info()$isdir
返回一个布尔向量,告诉您哪些对象是目录<代码>
是逻辑求反函数。在
files[!file.info(files)$isdir]
中,我们对
文件
向量进行子集,并删除作为目录的元素。剩下的向量只包含文件。对象
数据
是一个
列表
,只要作为列表元素的数据帧具有相同的列,就可以使用
dpyr的
bind_rows
函数将它们绑定在一起。在R中有很多方法可以做到这一点。