2011-04-19 54 views
5

Tôi muốn viết hàm bằng cách sử dụng ddply xuất kết quả thống kê tóm tắt dựa trên tên của hai cột là data.framemat.Thống kê tóm tắt bằng cách sử dụng ddply

  • mat là một lớn data.frame với tên của cột "metric", "length", "species", "tree", ...,"index"

  • index là yếu tố với 2 cấp độ "Short", "Long"

  • "metric", "length", "species", "tree" và những người khác là tất cả các biến liên tục

Chức năng :

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 
} 

tôi mong đợi đầu ra trông như thế này sau khi gọi 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. 

.... 

Tại thời điểm này chức năng không tạo ra các kết quả mong muốn? Sửa đổi gì nên được thực hiện ở đây?

Cảm ơn sự giúp đỡ của bạn.


Dưới đây là một ví dụ đồ chơ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

này sẽ dễ dàng hơn để trả lời nếu bạn cung cấp dữ liệu mẫu (prefereably với ' dput'). –

+0

@ Richie- Đây là ví dụ đồ chơi 'mat <-data.frame (metric = rpois (10,10), length = rpois (10,10), loài = rpois (10,10), tree = rpois (10, 10), index = c (rep ("Short", 5), rep ("Long", 5))) '- Thanks – Tony

+1

Bạn có thể chỉnh sửa câu hỏi để thêm dữ liệu mẫu thay vì viết bình luận (tôi đã thực hiện nó cho bạn);)). – Marek

Trả lời

4

Nick wrote in his answer bạn không thể sử dụng $ để biến tham chiếu được chuyển thành tên ký tự. Khi bạn đã viết X$arg1 thì R tìm kiếm cột có tên "arg1" trong data.frameX. Bạn có thể tham chiếu đến nó theo X[,arg1] hoặc X[[arg1]].

Và nếu bạn muốn độc đáo có tên là đầu ra Tôi đề nghị dưới đây giải pháp:

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

Output cho dữ liệu đồ chơi là:

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

Đây có phải là giống như những gì bạn muốn?

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 
} 
Các vấn đề liên quan