Вы можете просто сделать обертку вокруг функции 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
Шаг 1: Вы можете написать функцию, которая принимает одно имя файла (путь), а затем читает в файле и добавляет соответствующий столбец? Шаг 2: Используйте эту функцию в 'ldply'. – joran