我正在尝试使用R合并一个充满逗号分隔文本文件的目录,同时还将每个文件的文件名合并为数据集中的新变量。
我一直在使用以下内容:
library(plyr)
file_list <- list.files()
dataset <- ldply(file_list, read.table, header=FALSE, sep=",")
任何人都可以了解我如何为每个文件添加文件名作为数据集中的新变量读取?
非常感谢,
-Jon
答案 0 :(得分:2)
您可以在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