Вы, возможно, уже знаете об этом (в таком случае, я извиняюсь), но функция list.files
делает именно это - она выводит вектор всех файлов, удовлетворяющих критерию шаблона.На самом деле он не импортирует файлы.Я бы настроил вашу процедуру следующим образом.
Обратите внимание, что я предполагаю, что вы имеете дело с файлами .csv.Это должно работать с соответствующими изменениями для любых текстовых файлов.Дополнительные пакеты необходимы, если они являются файлами .xlsx.Если они являются .Rdata
файлами, необходимы другие модификации.
files <- list.files(pattern = "foodconsumption")
result <- sapply(files, function(file) {
# read in file
temp <- read.csv(file) # adjustments may be needed for headers, etc.
# return column 25
temp[,25]
})
Если предположить, что каждый файл имеет одинаковое количество строк, на выходе получается матрица с 25 столбцами и строками, равными строкам вфайлы.Чтобы сделать эквивалент rbind
, мы просто возьмем транспонирование:
t(result)
Если число строк отличается, выводится список, и транспонирование не будет работать.В этом случае вам нужно будет заполнить пропущенные значения:
max_length <- max(sapply(result, length))
result_mat <- sapply(result, function(x) {
if (length(result) < max_length) c(result, rep(NA, max_length - length(result)))
else result
})
Обратите внимание, что это неявно предполагает, что все недостающие данные находятся в конце, и / или что порядок данных в каждом файлене имеет значения.Если это не так, будьте очень осторожны с созданием матрицы здесь - может быть, лучше работать с данными в виде списка.