2011-07-28 30 views
9

Tôi đang sử dụng ddply để tổng hợp dữ liệu của mình nhưng không tìm thấy cách thanh lịch để chỉ định tên cột cho khung dữ liệu đầu ra.tên cột được tổng hợp ddply

Hiện nay tôi đang làm điều này:

agg_data <- ddply(raw_data, .(id, date, classification), nrow) 
names(agg_data)[4] <- "no_entries" 

và điều này

agg_data <- ddply(agg_data, .(classification, date), colwise(mean, .(no_entries))) 
names(agg_data)[3] <- "avg_no_entries" 

Có một cách thanh lịch hơn tốt hơn để làm điều này?

+0

Bạn cũng có thể muốn xem 'count' – hadley

Trả lời

8

Bạn có thể sử dụng summarise:

agg_data <- ddply(raw_data, .(id, date, classification), summarise, "no_entries" = nrow(piece)) 

hoặc bạn có thể sử dụng length(<column_name>) nếu nrow(piece) không hoạt động. Ví dụ, đây là một ví dụ mà nên Runnable bởi bất cứ ai:

ddply(baseball, .(year), summarise, newColumn = nrow(piece)) 

hoặc

ddply(baseball, .(year), summarise, newColumn = length(year)) 

EDIT

Hoặc như Joshua ý kiến, phiên bản tất cả mũ, NROW hiện kiểm tra bạn.

+1

'NROW' thực hiện việc kiểm tra cần thiết cho bạn. –

+0

@Joshua - Wow, cảm ơn, không thể tin rằng tôi không biết về điều đó ... – joran

+1

hoạt động tốt; Tôi không biết biến 'piece'. Bạn có bất kỳ ý tưởng làm thế nào nó hoạt động khi tôi đã sử dụng chức năng colwise? Tôi đã thêm một ví dụ thứ hai cho câu hỏi trên. – behas

9

Dạng chung tôi sử dụng rất nhiều là:

ddply(raw_data, .(id, date, classification), function(x) data.frame(no_entries=nrow(x)) 

tôi sử dụng chức năng ẩn danh trong ddply báo cáo của tôi gần như tất cả các thời gian để các thành ngữ trên lưới tốt với chức năng ẩn danh. Đây không phải là cách ngắn gọn nhất để thể hiện một hàm như nrow() nhưng với các hàm mà tôi vượt qua nhiều đối số, tôi thích nó rất nhiều.

Các vấn đề liên quan