2011-07-23 12 views
6

मैं जानता हूँ कि xtabs और टेबल की तरह आदेशों कारों की संख्या से पता चलता एक उपयोगकर्ता पार सारणीकरणसूत्रों [आर]

उदाहरण के लिए निम्न आदेश पिवट तालिका उत्पन्न करने की अनुमति का उपयोग कर तालिका में मूल्यों का मतलब गिना जा रहा है कि गियर और सिलेंडरों की संख्या समान है।

> xtabs(~cyl+gear, data = mtcars) 
    gear 
cyl 3 4 5 
    4 1 8 2 
    6 2 4 1 
    8 12 0 2 
> 

हम सूत्र का विस्तार कर सकते तो यह प्रत्येक बिन

> xtabs(hp~cyl+gear, data = mtcars) 
    gear 
cyl 3 4 5 
    4 97 608 204 
    6 215 466 175 
    8 2330 0 599 
> 

मैं अब सोच रहा हूँ में कारों के लिए हॉर्स पावर की राशि दिखा सकता है, यह घोड़ा शक्तियों का मतलब की गणना करने के लिए संभव है प्रत्येक बिन में कारों के लिए? इस xtabs(mean(hp)~cyl+gear, data = mtcars)

+2

मैं कैसे 'xtabs' (जो मैं पहले इस्तेमाल कभी नहीं किया है) के साथ यह करने के लिए है, लेकिन' reshape' पैकेज के साथ यह करने के लिए यकीन नहीं है, एक तरह से 'डाली है (पिघलाएं (mtcars, id = c ("cyl", "gear")), सिल ~ गियर, सबसेट = चर == "एचपी", मतलब) '। – grautur

+1

xtabs (एचपी ~ सिल + गियर, डेटा = mtcars)/xtabs (~ सिल + गियर, डेटा = mtcars) – jverzani

उत्तर

10

आप reshape पुस्तकालय

cast(mtcars, cyl ~ gear, value = 'hp', fun = mean) 
+0

+1 सरल, स्पष्ट, प्रत्यक्ष। हमेशा रामनाथ के रूप में अच्छा जवाब! –

7

एक दिलचस्प प्रतिक्रिया की तरह उदाहरण के कुछ है कि मैं आर-सहायता से प्राप्त करने के लिए निम्न प्रकार है:

> attach(mtcars) 
> tapply(hp,list(cyl,gear),mean) 
     3  4  5 
4 97.0000 76.0 102.0 
6 107.5000 116.5 175.0 
8 194.1667 NA 299.5 
> 
+1

हाँ, यह उचित बात है !!! मैं xtabs का उपयोग नहीं करता, मैं बस सब कुछ पूरा करने के बाद मानक tapply, लागू, लापरवाही समारोह का उपयोग करें। पहली बार से मैं इसे मानक tapply के साथ हल करने योग्य होना चाहिए, और यह है! धन्यवाद। आधार के लिए – TMS

+1

+1, लेकिन संलग्न करने की कोई आवश्यकता नहीं है, केवल लागू कथन में फ़ंक्शन (x) सूची (x $ cyl, x $ gear), माध्य का उपयोग करें)। अटैचमेंट खराब प्रोग्रामिंग अभ्यास है और बाद में बड़ी समस्याएं पैदा कर सकता है। –

+3

या 'के साथ (mtcars, tapply (एचपी, सूची (सिल, गियर), मतलब)) –

3

(एक जवाबी कार्रवाई के लिए मेरी टिप्पणी चलती, तो मैं बेहतर संपादित कर सकें।)

मुझे यकीन नहीं है कि इसे xtabs (जिसे मैंने पहले कभी नहीं उपयोग किया है) के साथ कैसे किया जाए, लेकिन reshape और plyr पैकेजों का उपयोग करके इसे करने के कुछ तरीके यहां दिए गए हैं।

> x = melt(mtcars, id = c("cyl", "gear"), measure = c("hp")) 
> cast(x, cyl ~ gear, mean) 

> x = ddply(mtcars, .(cyl, gear), summarise, hp = mean(hp)) 
> cast(x, cyl ~ gear) 
+0

कास्ट के लिए +1, यद्यपि पिघलने की जरूरत नहीं है! –

0

की गणना का एक अन्य तरीका यह कुल() फ़ंक्शन का उपयोग करना है से cast का उपयोग कर एक पंक्ति में कर सकते हैं। हालांकि आउटपुट एक टेबल के रूप में नहीं है। (twitter के माध्यम से)

> aggregate(hp~cyl+gear,data=mtcars,mean) 
    cyl gear  hp 
1 4 3 97.0000 
2 6 3 107.5000 
3 8 3 194.1667 
4 4 4 76.0000 
5 6 4 116.5000 
6 4 5 102.0000 
7 6 5 175.0000 
8 8 5 299.5000 
> 
संबंधित मुद्दे