我有一个名为“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
}
资料准备:
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