This should do the trick:
do.call(rbind, lapply(files, function(x) {
dat <- read.csv(x, header=TRUE)
do.call(rbind, lapply(seq(ncol(dat)), function(idx) {
data.frame(filename=x, column=colnames(dat)[idx],
value=unique(dat[,idx]))
}))
}))
The outer lapply
returns a data frame for each of your files x
, and the inner lapply
returns a data frame for each column numbered idx
within x
.