Я роблю порівняно простий аналіз, який я ввів у функцію, для всіх файлів у певній папці. Мені було цікаво, чи є у кого-небудь підказки, які допоможуть мені автоматизувати процес у ряді різних папок.
- По-перше, мені було цікаво, чи є спосіб читати всі файли в певній папці прямо в R. Я вважаю, що наступна команда перелічить усі файли:
files <- (Sys.glob("*.csv"))
... який я знайшов за допомогою R для переліку всіх файлів із вказаним розширенням
А потім наступний код зчитує всі ці файли в R.
listOfFiles <- lapply(files, function(x) read.table(x, header = FALSE))
... від Маніпулювання кількома файлами в R
Але файли, схоже, читаються як один суцільний список, а не окремі файли ... як я можу змінити сценарій, щоб відкрити всі файли csv у певній папці як окремі кадри даних?
По-друге, припускаючи, що я можу прочитати всі файли окремо, як я можу виконати функцію на всіх цих кадрах за один раз. Наприклад, я створив чотири невеликі кадри даних, щоб я міг проілюструвати, що я хочу:
Df.1 <- data.frame(A = c(5,4,7,6,8,4),B = (c(1,5,2,4,9,1))) Df.2 <- data.frame(A = c(1:6),B = (c(2,3,4,5,1,1))) Df.3 <- data.frame(A = c(4,6,8,0,1,11),B = (c(7,6,5,9,1,15))) Df.4 <- data.frame(A = c(4,2,6,8,1,0),B = (c(3,1,9,11,2,16)))
Я також склав приклад функції:
Summary<-function(dfile){
SumA<-sum(dfile$A)
MinA<-min(dfile$A)
MeanA<-mean(dfile$A)
MedianA<-median(dfile$A)
MaxA<-max(dfile$A)
sumB<-sum(dfile$B)
MinB<-min(dfile$B)
MeanB<-mean(dfile$B)
MedianB<-median(dfile$B)
MaxB<-max(dfile$B)
Sum<-c(sumA,sumB)
Min<-c(MinA,MinB)
Mean<-c(MeanA,MeanB)
Median<-c(MedianA,MedianB)
Max<-c(MaxA,MaxB)
rm(sumA,sumB,MinA,MinB,MeanA,MeanB,MedianA,MedianB,MaxA,MaxB)
Label<-c("A","B")
dfile_summary<-data.frame(Label,Sum,Min,Mean,Median,Max)
return(dfile_summary)}
Зазвичай я б використовував таку команду, щоб застосувати функцію до кожного окремого фрейму даних.
Df1.summary <-Summary (dfile)
Чи є спосіб замість того, щоб застосувати функцію до всіх фреймів даних, і використовувати заголовки фреймів даних у зведених таблицях (тобто Df1.summary).
Дуже дякую,
Кеті
plyr::llply
(абоldply
) замість того,lapply
щоб зберегти імена на всьому протязі, та визначити власну функцію підсумку, наприкладplyr::each(min, max, mean, sd, median)