我正在尝试使用 R 合并一个充满逗号分隔文本文件的目录,同时还将每个文件的文件名合并为数据集中的新变量。
我一直在使用以下内容:
library(plyr)
file_list <- list.files()
dataset <- ldply(file_list, read.table, header=FALSE, sep=",")
任何人都可以阐明我如何将每个文件的文件名添加为数据集中的新变量吗?
非常感谢,
-乔恩
您可以对read.table()
添加到文件名变量的函数进行包装。像这样的东西应该工作:
read.data <- function(file){
dat <- read.table(file,header=F,sep=",")
dat$fname <- file
return(dat)
}
到达那里后,您只需在数据文件中应用该功能。由于您没有发布任何示例数据,我不确定它实际上是什么样子,但现在我假设它尽可能干净并且rbind()
足以将它们连接在一起,在这种情况下,这个示例应该说明该功能在行动:
> data(iris)
> write.csv(iris,file="iris1.csv",row.names=F)
> write.csv(iris,file="iris2.csv",row.names=F)
> dataset <- do.call(rbind, lapply(list.files(pattern="csv$"),read.data))
> head(dataset)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species fname
1 5.1 3.5 1.4 0.2 setosa iris1.csv
2 4.9 3.0 1.4 0.2 setosa iris1.csv
3 4.7 3.2 1.3 0.2 setosa iris1.csv
4 4.6 3.1 1.5 0.2 setosa iris1.csv
5 5.0 3.6 1.4 0.2 setosa iris1.csv
6 5.4 3.9 1.7 0.4 setosa iris1.csv
> table(dataset$fname)
iris1.csv iris2.csv
150 150