2011-10-10 6 views
5

मैं हर समय melt और cast करने के लिए प्रयुक्त होता हूं, और इस बार मैं साफ-सुथरा एक-लाइनर ढूंढ रहा हूं।पिलर के साथ रीशेप-आधारित आदतों में शामिल: पिघल/कास्ट बनाम 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 

क्या यह ddply या smth के साथ संभव है? मैं एक लाइनर के लिए बेताब हूँ। मैंने कोशिश की:

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 
निश्चित रूप से

, इस काम करता है, लेकिन नहीं cyl और am द्वारा hp का सारांश द्वारा। यह थोड़ा थोड़ी देर के बाद से मैं इस्तेमाल किया plyr और reshape तो मैं तरह-की मेरी मांसपेशियों ... इसलिए ... बहाना-moi डालना उने सवाल triviale खो दिया ... =/

उत्तर

12

summmarize अपने दोस्त हो सकता है:

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, वह वही था! thanx! – aL3xa

6

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

क्षमा करें दोस्त, @ चेस आपको 3 सेकंड तक हराता है, इसलिए उसे चेकमार्क मिल जाता है। =/लेकिन thanx बहुत कुछ! – 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 

मुझे यकीन है कि प्रत्येक कार्य दो बार नाम के लिए होने से बचने के लिए कैसे नहीं कर रहा हूँ , हालांकि ...

+6

'साथ' और 'प्रत्येक',' ddply (mtcars, c ("cyl", "am") का उपयोग करके, प्रत्येक (न्यूनतम, माध्य, एसडी, अधिकतम) (एचपी)) ' – baptiste

+0

@baptiste, अगर आप डालते हैं यह एक उत्तर के रूप में, मुझे यह जांचने में खुशी होगी, क्योंकि यह एक सही जवाब है! ठीक वही जो मेरे द्वारा खोजा जा रहा था! – aL3xa

संबंधित मुद्दे