2010-04-01 28 views
11

Tôi cần tóm tắt một khung dữ liệu bằng một số biến, bỏ qua các biến khác. Điều này đôi khi được gọi là sụp đổ. Ví dụ. nếu tôi có một dataframe như thế này:Làm thế nào tôi có thể thu gọn một khung dữ liệu theo một số biến, lấy giá trị trung bình trên một số biến khác,

Widget Type Energy 
egg 1 20 
egg 2 30 
jap 3 50 
jap 1 60 

Sau đó bị sụp đổ bởi Widget, với năng lượng biến phụ thuộc, Năng lượng ~ Widget, sẽ mang lại

Widget Energy 
egg 25 
jap 55 

Trong Excel chức năng gần nhất có thể là "bảng Pivot" và tôi đã làm việc ra làm thế nào để làm điều đó trong python (http://alexholcombe.wordpress.com/2009/01/26/summarizing-data-by-combinations-of-variables-with-python/), và đây là một ví dụ với R bằng cách sử dụng thư viện doBy để làm một cái gì đó rất liên quan (http://www.mail-archive.com/[email protected]/msg02643.html), nhưng có một cách dễ dàng để làm ở trên? Và thậm chí tốt hơn là có bất cứ điều gì được xây dựng vào thư viện ggplot2 để tạo ra các ô mà sụp đổ trên một số biến?

Trả lời

13

Sử dụng aggregate để tóm tắt qua một yếu tố:

> df<-read.table(textConnection(' 
+ egg 1 20 
+ egg 2 30 
+ jap 3 50 
+ jap 1 60')) 
> aggregate(df$V3,list(df$V1),mean) 
    Group.1 x 
1  egg 25 
2  jap 55 

Để biết thêm cái nhìn linh hoạt tại tapply chức năng và các plyr gói.

Trong ggplot2 sử dụng stat_summary để tóm tắt

qplot(V1,V3,data=df,stat="summary",fun.y=mean,geom='bar',width=0.4) 
+2

'by' cũng có ích trong từng thời kỳ. –

+1

đúng. cũng 'ave' –

+3

cho một ví dụ sử dụng' ddply' từ gói 'plyr' hãy xem câu hỏi liên quan này: http://stackoverflow.com/questions/2473659/r-what-are-the-best-functions- đến-deal-với-concatenating-và-trung bình-giá trị-in – mropa

4

Đối với những người quen thuộc với SQL, một cách khác để thao tác dataframes có thể là lệnh sqldf trong gói sqldf.

library(sqldf) 
sqldf("SELECT Widget, avg(Energy) FROM yourDataFrame GROUP BY Widget") 
1

@Jyotirmoy đã đề cập rằng điều này có thể được thực hiện với thư viện plyr. Đây là những gì mà sẽ trông như thế:

DF <- read.table(text= 
"Widget Type Energy 
egg 1 20 
egg 2 30 
jap 3 50 
jap 1 60", header=TRUE) 

library("plyr") 
ddply(DF, .(Widget), summarise, Energy=mean(Energy)) 

mang đến cho

> ddply(DF, .(Widget), summarise, Energy=mean(Energy)) 
    Widget Energy 
1 egg  25 
2 jap  55 
Các vấn đề liên quan