将文件名和文件夹名称提取到 R 中数据框的 2 列中

问题描述 投票:0回答:1

我有一个名为“Device 1 - Bin 4 - LongTube”的文件夹,里面有 8 个 csv 文件。我将读取每个文件中的数据,然后将其存储在数据框中。除了数据文件中的列之外,我还想将每个文件的文件名包含在同一数据框中的单独列中。我还想将文件夹名称(设备 1 - Bin 4 - LongTube)作为数据框中的单独列包含在内。我如何在 R 中执行此操作?

我使用下面的代码开始,但它没有分别生成文件名和文件夹名的 2 列。

## Specify the csv file folder
mydir = "C:/Users/Administrator/Downloads/Data/Device 1 - Bin 4 - LongTube"
myfiles = list.files(path=mydir,full.names=TRUE)

# create an empty list to store the dataframes
datalist <- list()

for (file in myfiles)
{
  ## Importing the data file 
  df <- read.csv(file, header = TRUE)
  
  ## Extract the filename
  df$filename <- myfiles
  
  # add the dataframe to the list
  datalist[[file]] <- df

}
r csv directory filenames
1个回答
0
投票

资料准备:

dir.create("subdir")
write.csv(mtcars[1:3,], "subdir/mt.csv", row.names=FALSE)
write.csv(iris[1:3,], "subdir/iris.csv", row.names=FALSE)

检索文件列表:

myfiles <- list.files("subdir", pattern = "csv$", full.names = TRUE)
myfiles
# [1] "subdir/iris.csv" "subdir/mt.csv"  

将文件读入帧列表:

datalist <- lapply(setNames(nm = myfiles), read.csv)
datalist
# $`subdir/iris.csv`
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5          1.4         0.2  setosa
# 2          4.9         3.0          1.4         0.2  setosa
# 3          4.7         3.2          1.3         0.2  setosa
# $`subdir/mt.csv`
#    mpg cyl disp  hp drat    wt  qsec vs am gear carb
# 1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
# 2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
# 3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1

添加目录和文件名:

datalist <- Map(function(x, fn) transform(x, filename=basename(fn), dir=dirname(fn)), datalist, myfiles)
datalist
# $`subdir/iris.csv`
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species filename    dir
# 1          5.1         3.5          1.4         0.2  setosa iris.csv subdir
# 2          4.9         3.0          1.4         0.2  setosa iris.csv subdir
# 3          4.7         3.2          1.3         0.2  setosa iris.csv subdir
# $`subdir/mt.csv`
#    mpg cyl disp  hp drat    wt  qsec vs am gear carb filename    dir
# 1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4   mt.csv subdir
# 2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4   mt.csv subdir
# 3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1   mt.csv subdir
© www.soinside.com 2019 - 2024. All rights reserved.