2010-11-26 9 views
5

पुन: जुड़ें यह मेरी पहली पोस्ट है। अगर मेरा सवाल गूंगा है तो अग्रिम क्षमा करें। मैं प्रोग्रामिंग के लिए नया हूँ।स्प्लिट मैट्रिक्स और

ठीक है, तो मेरे पास आर में matrix(eBpvalues) है जिसमें 152720 पंक्तियां और 2 कॉलम हैं। मैं 10 अलग मैट्रिक्स में विभाजित करना चाहता हूं जिनमें प्रत्येक 15272 पंक्तियां हैं।

मैं के साथ इस प्रयास किया है:

> newmx <-split(as.data.frame(eBpvalues), rep(1:10, each = 15272))) 

> summary(newmx) 

    Length Class  Mode 
1 2  data.frame list  
2 2  data.frame list 
3 2  data.frame list 
4 2  data.frame list 
5 2  data.frame list 
6 2  data.frame list 
7 2  data.frame list 
8 2  data.frame list 
9 2  data.frame list 
10 2  data.frame list 

मैं में शामिल होने के बारे में कैसे जाना होगा इन मैट्रिक्स साइड-बाई-साइड तो मैं 20 कॉलम और 15272 पंक्तियों के साथ एक नया मैट्रिक्स है?

चीयर्स,

नील

+0

@ user521469: जैसा गैविन ने आपको दिखाया है, आपको अपने प्रश्नों में एक पुन: उत्पन्न उदाहरण शामिल करना चाहिए। इस तरह हमें यह अनुमान लगाने की ज़रूरत नहीं है कि आपका डेटा कैसा दिखता है। –

+0

ठीक है। भविष्य में – nrhorner

उत्तर

9

आपने लगभग कर रहे हैं। इन स्थितियों में अक्सर उपयोग किया जाने वाला फ़ंक्शन do.call होता है, जो एक फ़ंक्शन लेता है जिसे आप लागू करना चाहते हैं और इसे लागू करने के लिए डेटा की एक सूची लेती है। जिस फ़ंक्शन को आप लागू करना चाहते हैं वह cbind से कॉलम एक साथ 10 डेटा फ्रेम/मैट्रिक्स को बाध्य करता है।

आपको सचमुच लेते हुए, हम उचित आकार के मैट्रिक्स mat (eBpvalues) के साथ शुरू करते हैं। एक डेटा फ्रेम में परिवर्तित करें:

mat <- matrix(rnorm(152720 * 2), ncol = 2) 
df <- data.frame(mat) 

एक संकेतक कारक का निर्माण करने में एक आसान तरीका है gl() समारोह के माध्यम से है:

newMat <- split(df, ind) 

पिछले:

ind <- gl(10, 15272) 

फिर हम अपने split() फोन है चरण यह है, जहां हम newMat में डेटा फ्रेम के सेट पर cbind() लागू करने के लिए do.call():

res <- do.call(cbind, newMat) 

यह हमें वही देता है जो आप चाहते थे (हालांकि आपको कॉलम नामों को साफ करने की आवश्यकता हो सकती है)।

> str(res) 
'data.frame': 15272 obs. of 20 variables: 
$ 1.X1 : num -0.268 -0.8568 -0.0267 1.0894 1.5847 ... 
$ 1.X2 : num 0.71 -0.298 0.359 0.97 -2.158 ... 
$ 2.X1 : num -0.987 -0.222 2.991 0.443 0.228 ... 
$ 2.X2 : num -2.343 -1.023 -1.48 1.47 0.758 ... 
$ 3.X1 : num -0.305 -0.761 0.817 1.347 0.694 ... 
$ 3.X2 : num -0.0915 0.4816 1.4662 -1.2668 -1.3523 ... 
$ 4.X1 : num -0.678 -1.056 1.029 -0.468 0.836 ... 
$ 4.X2 : num -0.656 -0.459 -0.965 -1.666 0.877 ... 
$ 5.X1 : num -0.295 -1.255 1.395 -1.985 -1.71 ... 
$ 5.X2 : num 1.141 1.177 -1.003 -0.29 -0.234 ... 
$ 6.X1 : num -0.0548 1.8673 -1.5388 -1.1063 0.3923 ... 
$ 6.X2 : num -1.399 0.57 0.367 -0.811 -2.434 ... 
$ 7.X1 : num 0.389 -1.058 0.61 1.102 -0.063 ... 
$ 7.X2 : num 0.854 1.251 1.095 -0.485 0.451 ... 
$ 8.X1 : num -2.018 0.849 0.3 0.988 -1.993 ... 
$ 8.X2 : num -1.23 -1.025 -0.546 1.674 0.588 ... 
$ 9.X1 : num 0.814 0.726 1.04 0.985 1.781 ... 
$ 9.X2 : num -1.094 -1.051 0.749 1.426 0.402 ... 
$ 10.X1: num 0.3786 1.6131 -0.4149 0.0684 -0.815 ... 
$ 10.X2: num 0.383 -0.136 -0.751 -0.164 0.434 ... 
+0

काम करेगा! बहुत बहुत धन्यवाद। थोड़ी देर के लिए उस के साथ संघर्ष कर रहे थे। सूचकांक के लिए – nrhorner

+2

thx()। मैं उस समारोह के बारे में भूल रहा हूँ। –

4

सूचकांकों का उपयोग करना, आप आसानी से इस विभाजन आदेश के बिना तथ्य यह है कि आर मैट्रिक्स columnwise भरता उपयोग कर सकते हैं,।

एक खिलौना उदाहरण:

> eBpvalues <- matrix(1:100,ncol=2) # a matrix with 2 cols and 50 values 
> id <- c(1,11)+rep(0:9,each=2) 
> id 
[1] 1 11 2 12 3 13 4 14 5 15 6 16 7 17 8 18 9 19 10 20 
> tt <- matrix(eBpvalues,ncol=20)[,id] 
> tt # a matrix with the 2 cols split up and binded rowwise 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] 
[1,] 1 51 6 56 11 61 16 66 21 71 26 76 31 81 36 86 41 91 46 96 
[2,] 2 52 7 57 12 62 17 67 22 72 27 77 32 82 37 87 42 92 47 97 
[3,] 3 53 8 58 13 63 18 68 23 73 28 78 33 83 38 88 43 93 48 98 
[4,] 4 54 9 59 14 64 19 69 24 74 29 79 34 84 39 89 44 94 49 99 
[5,] 5 55 10 60 15 65 20 70 25 75 30 80 35 85 40 90 45 95 50 100 

यह आपको एक मैट्रिक्स फिर से देता है। यदि आप विभाजन का उपयोग करते हैं, तो आप गेविन के समाधान का उपयोग कर सकते हैं। यह सब कुछ डेटाफ्रेम में परिवर्तित करता है, जिसमें अनचाहे साइड इफेक्ट्स हो सकते हैं। शुरुआत के लिए बड़े matrices पर थोड़ा धीमा होने के नाते।

+0

बहुत बहुत धन्यवाद जोरीस – nrhorner

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