2011-04-19 28 views
5

ddply kullanarak, data.framemat iki sütununun adlarına dayalı özet istatistikleri çıkaran bir işlev yazmak istiyorum.Özet istatistikleri ddply kullanarak

  • mat 2 seviyeleri "Short", "Long"

  • "metric", "length", "species", "tree" ile faktör sütunlar "metric", "length", "species", "tree", ...,"index"

  • index adıyla data.frame büyük olduğu ve diğerlerinin

Fonksiyon tüm sürekli değişkenler :

summary1 <- function(arg1,arg2) { 
    ... 

    ss <- ddply(mat, .(index), function(X) data.frame(
     arg1 = as.list(summary(X$arg1)), 
     arg2 = as.list(summary(X$arg2)), 
     .parallel = FALSE) 

    ss 
} 
Ben çıkış fonksiyonu istenen sonuç vermez anda summary1("metric","length")

Short metric.Min. metric.1st.Qu. metric.Median metric.Mean metric.3rd.Qu. metric.Max. length.Min. length.1st.Qu. length 
.Median length.Mean length.3rd.Qu. length.Max. 

.... 

Long metric.Min. metric.1st.Qu. metric.Median metric.Mean metric.3rd.Qu. metric.Max. length.Min. length.1st.Qu. length 
.Median length.Mean length.3rd.Qu. length.Max. 

.... 

çağırdıktan sonra bu gibi görünmeye bekliyoruz? Burada hangi değişiklik yapılmalı?

Yardımlarınız için teşekkürler. İşte


bir oyuncak örneği

mat <- data.frame(
    metric = rpois(10,10), length = rpois(10,10), species = rpois(10,10), 
    tree = rpois(10,10), index = c(rep("Short",5),rep("Long",5)) 
) 
+0

Bu ile Örnek verileri verdiyse prefereably (cevaplamak için daha kolay olurdu ' dput'). –

+0

@ Richie - İşte bir oyuncak örneği olan 'mat <-data.frame (metrik = rpois (10,10), uzunluk = rpois (10,10), tür = rpois (10,10), ağaç = rpois (10, 10), index = c (rep ("Kısa", 5), rep ("Uzun", 5))) '- Teşekkür – Tony

+1

Bir yorum yazmak yerine örnek veriler eklemek için soruyu düzenleyebilirsiniz (sizin için yaptım;)). – Marek

cevap

4

Nick wrote in his answer olarak, karakter adı olarak geçirilen değişkene referansta bulunmak için $ kullanamazsınız. X$arg1 yazıp yazdığınızda, data.frameX numaralı telefona "arg1" adını verin. Buna X[,arg1] veya X[[arg1]] tarafından başvuruda bulunabilirsiniz.

Ve güzel çıktı adlandırılmış istediğiniz eğer çözümü aşağıda teklif: oyuncak verileri için

summary1 <- function(arg1, arg2) { 

    ss <- ddply(mat, .(index), function(X) data.frame(
     setNames(
      list(as.list(summary(X[[arg1]])), as.list(summary(X[[arg2]]))), 
      c(arg1,arg2) 
      )), .parallel = FALSE) 

    ss 
} 
summary1("metric","length") 

Çıktı geçerli:

index metric.Min. metric.1st.Qu. metric.Median metric.Mean metric.3rd.Qu. 
1 Long   5    7   10   8.6    10 
2 Short   7    7    9   8.8    10 
    metric.Max. length.Min. length.1st.Qu. length.Median length.Mean length.3rd.Qu. 
1   11   9    10   11  10.8    12 
2   11   4    9    9   9.0    11 
    length.Max. 
1   12 
2   12 
1

bu daha ne istiyorsun gibi mi?

summary1 <- function(arg1,arg2) { 
ss <- ddply(mat, .(index), function(X){ data.frame(
    arg1 = as.list(summary(X[,arg1])), 
    arg2 = as.list(summary(X[,arg2])), 
    .parallel = FALSE)}) 
ss 
}