Wykonuję stosunkowo prostą analizę, którą umieściłem w funkcji, na wszystkich plikach w określonym folderze. Zastanawiałem się, czy ktoś ma jakieś wskazówki, które pomogłyby mi zautomatyzować proces na wielu różnych folderach.
- Po pierwsze, zastanawiałem się, czy istnieje sposób na odczytanie wszystkich plików w określonym folderze bezpośrednio do R. Sądzę, że poniższe polecenie wyświetli listę wszystkich plików:
files <- (Sys.glob("*.csv"))
... które znalazłem przy użyciu R, aby wyświetlić listę wszystkich plików z określonym rozszerzeniem
A następnie poniższy kod wczytuje wszystkie te pliki do R.
listOfFiles <- lapply(files, function(x) read.table(x, header = FALSE))
… Z Manipulowanie wieloma plikami w R
Ale wydaje się, że pliki są wczytywane jako jedna ciągła lista, a nie pojedyncze pliki… Jak mogę zmienić skrypt, aby otwierał wszystkie pliki csv w określonym folderze jako pojedyncze ramki danych?
Po drugie, zakładając, że mogę odczytać wszystkie pliki osobno, w jaki sposób mogę wykonać funkcję na wszystkich tych ramkach danych za jednym razem. Na przykład utworzyłem cztery małe ramki danych, aby zilustrować, czego chcę:
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)))
Stworzyłem też przykładową funkcję:
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)}
Zwykle użyłbym następującego polecenia, aby zastosować funkcję do każdej pojedynczej ramki danych.
Df1.summary <-Summary (dfile)
Czy istnieje sposób zamiast zastosować funkcję do wszystkich ramek danych i użyć tytułów ramek danych w tabelach podsumowań (np. Df1.summary).
Wielkie dzięki,
Katie
plyr::llply
(lubldply
) zamiastlapply
zachować nazwy przez cały czas i zdefiniować własną funkcję podsumowującą, np.plyr::each(min, max, mean, sd, median)