2013-02-20 40 views
17

पर अतिरिक्त कॉलम जोड़ना मैं आर प्रोग्रामिंग के लिए एक नौसिखिया हूं और 50 कॉलम वाले मैट्रिक्स में एक अतिरिक्त कॉलम जोड़ने की कोशिश कर रहा हूं। यह नया कॉलम उस पंक्ति में पहले 10 मानों का औसत होगा।आर प्रोग्रामिंग - मौजूदा मैट्रिक्स

randomMatrix <- generateMatrix(1,5000,100,50) 
randomMatrix51 <- matrix(nrow=100, ncol=1) 

for(ctr in 1:ncol(randomMatrix)){ 
randomMatrix51.mat[1,ctr] <- sum(randomMatrix [ctr, 1:10])/10 
} 

यह नीचे त्रुटि

Error in randomMatrix51.mat[1, ctr] <- sum(randomMatrix[ctr, 1:10])/10 :incorrect 
number of subscripts on matrix 

मैं इस

cbind(randomMatrix,sum(randomMatrix [ctr, 1:10])/10) 

की कोशिश की देता है लेकिन यह केवल एक पंक्ति के लिए काम करता है, अगर मैं पाश में इस cbind का उपयोग सभी पुराने मान हैं लिखित पर

मैं नए कॉलम में पहले 10 मानों का औसत कैसे जोड़ूं। पंक्तियों पर लूपिंग के अलावा ऐसा करने का कोई बेहतर तरीका है?

+2

मुझे लगता है कि आप अपने मैट्रिक्स दौर गलत तरीके का अनुक्रमण हो रही है 'एक्स [i, j]' को संदर्भित करता है पंक्तियों 'i' और कॉलम' जे'। साथ ही, 'जेनरेटिक्स' कहां से आता है? – mnel

+0

जो समस्या का एक हिस्सा हल करता है। लेकिन 'randomMatrix' में अतिरिक्त कॉलम जोड़ने का कोई तरीका है। यदि नहीं, तो मुझे 'randomMatrix51' को 'randomMatrix' को 'cbind' करना होगा। जेनरेट मैट्रिक्स पैराम्स (निचला lim, ऊपरी lim, पंक्तियों में से कोई नहीं, colmn) के साथ काम करता है। आर – user2085566

+0

'मानक ट्रांसफॉर्म में यह एक अंतर्निर्मित कार्य है,' ट्रांसफॉर्म (यादृच्छिक मैट्रिक्स, new.col = new.data) 'यह एक टन में मदद करेगा यदि आपने एक बहुत छोटा उदाहरण दिया है जिसे पूरी तरह से काटा जा सकता है और आर में चिपकाया जा सकता है आपके वांछित परिणामों का एक बेहतर विवरण। – N8TRO

उत्तर

4

मेथिंक आप इसे सोचने पर विचार कर रहे हैं।

a <- matrix(1:5000, nrow=100) 
a <- transform(a, first10ave = colMeans(a[1:10,])) 
+2

यह नए कॉलम की प्रत्येक पंक्ति के लिए समान मान देता है क्योंकि मतलब (एक [1:10,]) प्रत्येक पंक्ति के लिए गणना नहीं की जाती है। – thelatemail

31

बम!

a <- matrix(1:5000, nrow=100) 
a <- cbind(a,apply(a[,1:10],1,mean)) 

बड़ा डेटासेट पर यह हालांकि तेजी से (और यकीनन सरल) है उपयोग करने के लिए:

cbind(a, rowMeans(a[,1:10]))