SORU
5 Mart 2012, PAZARTESİ


Bir klasöre tüm dosyaları açmak ve bir işlevi uygulamak

Bir fonksiyon içine koydum hangi analizi nispeten basit bir parça, belirli bir klasördeki tüm dosyalar üzerinde yapıyorum. Herkes beni farklı klasörler bir dizi işlemi otomatik yardımcı olacak herhangi bir ipucu olup olmadığını merak ediyordum.

  1. Öncelikle, düz R., belirli bir klasördeki tüm dosyaları aşağıdaki komut tüm dosyaları listeler inanıyorum okumanın bir yolu olup olmadığını merak ediyordum:

files <- (Sys.glob("*.csv"))

Using R to list all files with a specified extension dan buldum . hangi ..

Ve sonra aşağıdaki kodu R. içine tüm dosyaları okur

listOfFiles <- lapply(files, function(x) read.table(x, header = FALSE)) 

...Manipulating multiple files in R

Ama o dosyalar da sürekli liste ve dosyaları tek tek... tek dataframes olarak belirli bir klasördeki tüm csv dosyaları açmak için senaryoyu değiştirebilirim? olarak okumak gibi görünüyor

  1. İkinci olarak, tüm dosyaları ayrı ayrı, nasıl bir bütün bu dataframes bir işlevi tamamlayabilirim okuma olabilir varsayarak. Örneğin, istediğim şeyi göstermek, böylece dört küçük dataframes oluşturduk:

    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)))
    

Ayrıca örnek bir fonksiyon bir şey geldi:

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)}

Normalde aşağıdaki komutu her birey dataframe için bu işlevi uygulamak için kullanırdım.

Df1.Özet<-Özet(dfile)

Orada tüm dataframes işlevi uygulamak yerine bir yoldur, ve özet tabloları dataframes başlıkları kullanın (yani Df1.Özet).

Çok teşekkürler

Katie

CEVAP
5 Mart 2012, PAZARTESİ


Tam tersine, list ile çalışmak kolay böyle şeyler otomatikleştirme yapar bence.

İşte çözümü (klasör içinde temp/ dört dataframes bende saklı).

filenames <- list.files("temp", pattern="*.csv", full.names=TRUE)
ldf <- lapply(filenames, read.csv)
res <- lapply(ldf, summary)
names(res) <- substr(filenames, 6, 30)

Önemli dosyaları için tam yolunu saklamak için full.names yaptığım gibi), aksi takdirde çalışma dizini, örneğin yapıştırmak için var

filenames <- list.files("temp", pattern="*.csv")
paste("temp", filenames, sep="/")

çok çalışacak. Tam yol atarak ise substr dosya adlarını ayıklamak için kullanılan unutmayın.

Aşağıdaki gibi Özet tabloları erişebilirsiniz

> res$`df4.csv`
       A              B        
 Min.   :0.00   Min.   : 1.00  
 1st Qu.:1.25   1st Qu.: 2.25  
 Median :3.00   Median : 6.00  
 Mean   :3.50   Mean   : 7.00  
 3rd Qu.:5.50   3rd Qu.:10.50  
 Max.   :8.00   Max.   :16.00  

Eğer gerçekten bireysel Özet tablolar elde etmek istiyorsanız, daha sonra bunları çıkarabilirsiniz. E. g.,

for (i in 1:length(res))
  assign(paste(paste("df", i, sep=""), "summary", sep="."), res[[i]])

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
R

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alfredo Garcia

    Alfredo Garc

    25 Mayıs 2007
  • kindlechatmail

    kindlechatma

    25 AĞUSTOS 2010
  • PorterRobinsonVEVO

    PorterRobins

    11 Kasım 2013