2012-05-28 10 views
21

ठीक है, जल्दी उत्तराधिकार में दूसरा आर प्रश्न।ddply + कॉलम की बड़ी संख्या में समान सांख्यिकीय फ़ंक्शन दोहराए जाने के लिए संक्षेप में

मेरे डेटा:

  Timestamp St_01 St_02 ... 
1 2008-02-08 00:00:00 26.020 25.840 ... 
2 2008-02-08 00:10:00 25.985 25.790 ... 
3 2008-02-08 00:20:00 25.930 25.765 ... 
4 2008-02-08 00:30:00 25.925 25.730 ... 
5 2008-02-08 00:40:00 25.975 25.695 ... 
... 

मूल रूप से सामान्य रूप से मैं ddply और summarize का एक संयोजन (जैसे पूरे साल भर में प्रत्येक घंटे के लिए इसका मतलब है) का उपयोग टुकड़ियों की गणना करने के होगा।

उपर्युक्त मामले में, मैं एक श्रेणी बनाउंगा, उदाहरण के लिए घंटे (जैसे strptime(data$Timestamp,"%H") -> data$hour और फिर उस श्रेणी स्तंभों में से प्रत्येक के पार श्रेणी के द्वारा औसत के ddply में उपयोग करते हैं, ddply(data,"hour", summarize, St_01=mean(St_01), St_02=mean(St_02)...) की तरह।

लेकिन यहाँ है, जहां यह चिपचिपा हो जाता है। मैं से निपटने के लिए 40 से अधिक स्तंभ है और मैं नहीं कर रहा हूँ summarize फ़ंक्शन के पैरामीटर के रूप में उन्हें एक-एक करके टाइप करने के लिए तैयार हैं। मैं इस कोड को उत्पन्न करने के लिए खोल में एक लूप लिखता था, लेकिन यह नहीं है कि प्रोग्रामर समस्याएं कैसे हल करते हैं?

तो प्रार्थना करें, क्या कोई बेहतर है एक ही परिणाम प्राप्त करने का तरीका लेकिन कम कीस्ट्रोक के साथ?

+0

उपयोग 'numcolwise()' – Andrie

+2

या नयी आकृति प्रदान 'St' चर लंबे तो अपने पसंदीदा एकत्रीकरण कार्यों का उपयोग' by', 'aggregate',' 'ddply' ग से गठबंधन करने के लिए (घंटे , सूचकांक) ', जहां 'इंडेक्स' पुनर्विक्रय में बनाई गई चर है। –

+0

वाई के लिए आसान अंक :-) –

उत्तर

36

आप सभी एन पर सारांश चलाने के लिए numcolwise() का उपयोग कर सकते हैं उमेरिक कॉलम

ddply(iris, .(Species), numcolwise(mean)) 
    Species Sepal.Length Sepal.Width Petal.Length Petal.Width 
1  setosa  5.006  3.428  1.462  0.246 
2 versicolor  5.936  2.770  4.260  1.326 
3 virginica  6.588  2.974  5.552  2.026 

इसी तरह, वहाँ है catcolwise() सब स्पष्ट स्तंभों पर संक्षेप में प्रस्तुत करने के लिए:

यहाँ एक उदाहरण iris का उपयोग कर रहा है।

अधिक सहायता और उदाहरणों के लिए ?numcolwise देखें।


संपादित

एक वैकल्पिक दृष्टिकोण reshape2 उपयोग करने के लिए (@ gsk3 द्वारा प्रस्तावित) है। यह इस उदाहरण में अधिक कीस्ट्रोक्स है, लेकिन आप भारी लचीलापन प्रदान करता है: ddply कॉल पूरी तरह से छोड़ते हुए द्वारा

पुस्तकालय (reshape2)

miris <- melt(iris, id.vars="Species") 
x <- ddply(miris, .(Species, variable), summarize, mean=mean(value)) 

dcast(x, Species~variable, value.var="mean") 
    Species Sepal.Length Sepal.Width Petal.Length Petal.Width 
1  setosa  5.006  3.428  1.462  0.246 
2 versicolor  5.936  2.770  4.260  1.326 
3 virginica  6.588  2.974  5.552  2.026 
+0

अच्छा लग रहा है! धन्यवाद! –

+0

एक बात। संक्षेप में यह कैसे काम करता है? क्योंकि मुझे प्रत्येक कॉलम में भी स्पष्ट रूप से सारांशित करने की आवश्यकता है। –

+1

मुझे यकीन नहीं है कि आपका क्या मतलब है। 'Colwise' या परिवार का उपयोग आमतौर पर आपको 'संक्षेप' का उपयोग करने की आवश्यकता नहीं है। क्या आप कृपया अपने प्रश्न पर विस्तार कर सकते हैं? – Andrie

7

तुम भी Andrie द्वारा प्रस्तावित दूसरा दृष्टिकोण को आसान बनाने में कर सकते हैं। बस dcast कॉल में एकत्रीकरण समारोह के रूप में mean निर्दिष्ट करें:

library(reshape2) 
miris <- melt(iris, id.vars="Species") 
dcast(miris, Species ~ variable, mean) 

    Species Sepal.Length Sepal.Width Petal.Length Petal.Width 
1  setosa  5.006  3.428  1.462  0.246 
2 versicolor  5.936  2.770  4.260  1.326 
3 virginica  6.588  2.974  5.552  2.026 

एक ही परिणाम भी बहुत तेजी से गणना की जा सकती data.table पैकेज का उपयोग। 0 अभिव्यक्ति में .SD चर एक विशेष डेटा.table चर है जिसमें प्रत्येक समूह के लिए डेटा का सबसेट होता है, by में उपयोग किए गए सभी कॉलम को छोड़कर।

library(data.table) 
dt_iris <- as.data.table(iris) 
dt_iris[, lapply(.SD, mean), by = Species] 

    Species Sepal.Length Sepal.Width Petal.Length Petal.Width 
1:  setosa  5.006  3.428  1.462  0.246 
2: versicolor  5.936  2.770  4.260  1.326 
3: virginica  6.588  2.974  5.552  2.026 

फिर भी एक और विकल्प नया संस्करण 0 होगा।हेडली के dplyr पैकेज के 2

library(dplyr) 
group_by(iris, Species) %>% summarise_each(funs(mean)) 

Source: local data frame [3 x 5] 

    Species Sepal.Length Sepal.Width Petal.Length Petal.Width 
1  setosa  5.006  3.428  1.462  0.246 
2 versicolor  5.936  2.770  4.260  1.326 
3 virginica  6.588  2.974  5.552  2.026 
संबंधित मुद्दे