2012-10-12 13 views
5

मैं एक वेक्टर के रूप में एक पंक्ति-प्रमुख डेटा डाल रहा हूं। आर इसे कॉलम-प्रमुख डेटा के रूप में व्याख्या करता है और जहां तक ​​मैं देख सकता हूं कि सरणी को पंक्ति-प्रमुख तरीके से व्यवहार करने का कोई तरीका नहीं है।पंक्ति-प्रमुख को कॉलम-प्रमुख आयामों पर स्विच करना

चलो कहते हैं कि मेरे पास दो:

array(1:12, c(3,2,2), 
    dimnames=list(c("r1", "r2", "r3"), c("c1", "c2"),c("t1", "t2")) 
) 

कौन देता है:

, , t1 

    c1 c2 
r1 1 4 
r2 2 5 
r3 3 6 

, , t2 

    c1 c2 
r1 7 10 
r2 8 11 
r3 9 12 

मैं इस डेटा को बदलने के लिए चाहते हैं पंक्ति-प्रमुख सरणी:

, , t1 
    c1 c2 
r1 1 2 
r2 3 4 
r3 5 6 

, , t2 

    c1 c2 
r1 7 8 
r2 9 10 
r3 11 12 

उत्तर

6

यह मानते हुए कि आपके सरणी a, यानी कि आप पहले से ही इस सरणी है और पढ़ने के समय में इसे बदल नहीं सकता है, तो निम्न काम करेगा:

a <- array(1:12, c(3,2,2), 
      dimnames=list(c("r1", "r2", "r3"), c("c1", "c2"),c("t1", "t2"))) 

b <- aperm(array(a, dim = c(2,3,2), 
       dimnames = dimnames(a)[2:1]), 
      perm = c(2,1,3)) 
b 

>  b 
, , 1 

    c1 c2 
r1 1 2 
r2 3 4 
r3 5 6 

, , 2 

    c1 c2 
r1 7 8 
r2 9 10 
r3 11 12 
2

समाधान:

aperm(array(1:12, c(2,3,2), 
    dimnames=list(c("c1","c2"),c("r1","r2","r3"),c("t1","t2"))), 
    perm=c(2,1,3) 
) 

ध्यान दें कि aperm आयामों को स्विच करता है। इसलिए अनिवार्य रूप से कॉलम पंक्तियों के साथ स्विच कर रहे हैं। इसके अलावा मुझे dimnames में कॉलम और पंक्तियों के क्रम को बदलने की जरूरत है।

यह पैदा करता है वास्तव में क्या जरूरत है:

, , t1 
    c1 c2 
r1 1 2 
r2 3 4 
r3 5 6 

, , t2 

    c1 c2 
r1 7 8 
r2 9 10 
r3 11 12 
+1

मैं उलझन में हूं। जिस सरणी को आप यहां दिखाते हैं वह * आपके * आपके प्रश्न में नहीं है। मैंने समझा कि आपके पास दिखाए गए फॉर्म की एक सरणी थी, जिस स्थिति में 'aperm() 'अकेले ही आपकी मदद नहीं करेगा। –

+0

मैं वांछित सरणी में डेटा (वेक्टर 1:12) को बदलना चाहता था। मैंने इसे समझने में कुछ समय बिताया है और सोचा है कि इसे यहां डालने से किसी और की मदद मिल सकती है। – Datageek

+1

आह, ठीक है। जब आपने लिखा "मेरे पास है", मैंने आपको सचमुच लिया। –

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