2011-10-10 13 views
5

Tôi là loại được sử dụng để làm meltcast mọi lúc, và lần này tôi đang tìm kiếm một lớp lót gọn gàng.Các thói quen dựa trên hình dạng thay đổi với plyr: nóng chảy/đúc so với ddply

require(reshape) 
# first I melt some data: 
m <- melt(mtcars, id.vars = c("cyl", "am"), measure.vars = "hp") 
# then cast it: 
cast(m, cyl + am ~ ., each(min, mean, sd, max)) 
    cyl am min  mean  sd max 
1 4 0 62 84.66667 19.65536 97 
2 4 1 52 81.87500 22.65542 113 
3 6 0 105 115.25000 9.17878 123 
4 6 1 110 131.66667 37.52777 175 
5 8 0 150 194.16667 33.35984 245 
6 8 1 264 299.50000 50.20458 335 

Điều này có thể với ddply hoặc không? Tôi đang tuyệt vọng cho một lớp lót. Tôi cố gắng:

ddply(mtcars, cyl + am ~ hp, each(min, max)) 
    cyl am hp min max 
1 4 0 62 0 146.7 
2 4 0 95 0 140.8 
3 4 0 97 0 120.1 
4 4 1 52 1 75.7 
5 4 1 65 1 71.1 
6 4 1 66 1 79.0 
7 4 1 91 0 120.3 
8 4 1 93 1 108.0 
9 4 1 109 1 121.0 
10 4 1 113 1 113.0 
11 6 0 105 0 225.0 
12 6 0 110 0 258.0 
13 6 0 123 0 167.6 
14 6 1 110 0 160.0 
15 6 1 175 0 175.0 
16 8 0 150 0 318.0 
17 8 0 175 0 400.0 
18 8 0 180 0 275.8 
19 8 0 205 0 472.0 
20 8 0 215 0 460.0 
21 8 0 230 0 440.0 
22 8 0 245 0 360.0 
23 8 1 264 0 351.0 
24 8 1 335 0 335.0 

tất nhiên, hoạt động này, nhưng không phải bằng cách tóm tắt hp bởi cylam. Đó là chút một thời gian kể từ khi tôi sử dụng plyrreshape vì vậy tôi loại-of mất cơ bắp ... như vậy ... cớ-moi pour une câu hỏi triviale tôi ... =/

Trả lời

12

summmarize có thể là bạn của bạn:

ddply(m, c("cyl", "am"), summarize 
     , min = min(value) 
     , mean = mean(value) 
     , sd = sd(value) 
     , max = max(value) 
) 

    cyl am min  mean  sd max 
1 4 0 62 84.66667 19.65536 97 
2 4 1 52 81.87500 22.65542 113 
3 6 0 105 115.25000 9.17878 123 
4 6 1 110 131.66667 37.52777 175 
5 8 0 150 194.16667 33.35984 245 
6 8 1 264 299.50000 50.20458 335 
+0

yepp, đó là một! thanx! – aL3xa

6

Sử dụng plyr:

> require(plyr) 
> ddply(mtcars,c("cyl","am"),summarise, min=min(hp), mean=mean(hp), sd=sd(hp), max=max(hp)) 
    cyl am min  mean  sd max 
1 4 0 62 84.66667 19.65536 97 
2 4 1 52 81.87500 22.65542 113 
3 6 0 105 115.25000 9.17878 123 
4 6 1 110 131.66667 37.52777 175 
5 8 0 150 194.16667 33.35984 245 
6 8 1 264 299.50000 50.20458 335 
+3

xin lỗi bạn đời, @Chase đánh bại bạn sau 3 giây, vì vậy anh ấy nhận được dấu kiểm. =/Nhưng thanx rất nhiều! – aL3xa

3
> ddply(mtcars, .(cyl, am), summarise, 
     min=min(hp), mean=mean(hp), sd=sd(hp), max=max(hp)) 
    cyl am min  mean  sd max 
1 4 0 62 84.66667 19.65536 97 
2 4 1 52 81.87500 22.65542 113 
3 6 0 105 115.25000 9.17878 123 
4 6 1 110 131.66667 37.52777 175 
5 8 0 150 194.16667 33.35984 245 
6 8 1 264 299.50000 50.20458 335 

tôi không chắc chắn làm thế nào để tránh được việc phải đặt tên cho mỗi chức năng hai lần , mặc dù ...

+6

sử dụng 'with' và' each', 'ddply (mtcars, c (" cyl "," am "), với, mỗi (min, mean, sd, max) (hp))' – baptiste

+0

@baptiste, nếu bạn đặt đây là một câu trả lời, tôi rất vui khi đánh dấu nó, vì đó là một câu trả lời hoàn hảo! Chính xác những gì tôi đang tìm kiếm! – aL3xa

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