2011-11-03 16 views
6

मुझे लगता है कि मैं कभी-कभी अलग-अलग डेटाफ्रेम (टेबल, मैट्रिस या जो भी) से कॉलम को पेस्ट करना चाहता हूं। उदाहरण के लिए मेरे पास साधनों की एक सारणी और स्टैन देव की एक तालिका है। मैं चाहता हूं कि दोनों लेटेक्स प्रिंटिंग के लिए ब्रांड्स के सेट में एसडी के साथ चिपके रहें। मुझे संदेह है कि एक दोस्ताना प्लीयर समाधान है लेकिन दो डेटा फ्रेमों पर काम करने के बारे में नहीं सोच सकता है (मैंने डेटा फ्रेम को सूची के रूप में संग्रहित करने और ldply का उपयोग करने का प्रयास किया लेकिन यह सूची प्लीयर फ़ंक्शन के साथ मेरा पहला प्रयास था और यह आग में नीचे चला गया।दो डेटा फ्रेमों के कॉलम पेस्ट करें

अग्रिम धन्यवाद।

#========= 
#fake data 
#========= 
x<-mtcars[1:3,1:3] 
y<-mtcars[1:3,8:10] 


#========================== 
#A column pasting function 
#========================== 
meansd<-function(x, y){ 
x<-round(x, dig=2) 
y<-round(y, dig=2) 
paste(x, "(", y, ")", sep="") 
} 

जहाँ तक है कि के रूप में मैं मिल गया।

वांछित परिणाम कोई स्तंभ नाम की जरूरत है। मुझे परवाह नहीं है अगर वापसी एक मैट्रिक्स या dataframe है

16.46(0) 0(1) 1(4) 
17.02(0) 0(1) 1(4) 
18.61(1) 1(1) 1(4) 
+2

यदि आप लेटेक्स में रीग्रेशन सारांश सारणी बनाने के लिए इसका उपयोग करना चाहते हैं, तो पैकेज 'memisc' में' mtable' पर एक नज़र डालें। यह एक बहुत ही लचीला फ़ंक्शन है जो आपको कम से कम प्रयासों के साथ कई प्रारूपों में अपने रिग्रेशन आउटपुट को आउटपुट करने की अनुमति देता है। – Ramnath

+0

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

+0

क्या आप परिणामी डेटा.फ्रेम 'xtable' जा रहे हैं? –

उत्तर

4

यहां आपका फ़ंक्शन प्रत्येक कॉलम के माध्यम से लूप करने और पेस्ट करने के लिए संपादित किया गया है। यह आपके वांछित परिणाम देता है, लेकिन ऐसा करने के लिए शायद एक चालाक तरीका है।

meansd<-function(x, y){ 
    x<-round(x, digits = 2) 
    y<-round(y, digits = 2) 
    out <- matrix(ncol = dim(x)[1], nrow = dim(x)[2]) 
    for(i in 1:dim(x)[1]) 
    { 
     out[i, ] <-paste(x[i, ], "(", y[i, ], ")", sep="") 
    } 
    return(out) 
} 
+0

रयान आपकी प्रतिक्रिया के लिए धन्यवाद। बहुत अच्छी तरह से काम करता है। यदि संभव हो तो मैं एक गैर लूप उत्तर की उम्मीद कर रहा हूं (मुझे यकीन है कि यह सिर्फ यह नहीं जानता कि कैसे)। –

+0

यह पहला जवाब था जो मेरे विनिर्देश से मेल खाता था और इसलिए मैं इसे स्वीकृत उत्तर चेक देता हूं। मेरी इच्छा थी कि मैं तीनों में से प्रत्येक को देख सकूं। –

7

यहाँ plyr

t(ldply(1:NCOL(x), function(i) meansd(x[,i], y[,i]))) 
+0

मुझे पता था कि यह प्लीयर के साथ किया जा सकता है। धन्यवाद। –

7

कैसे mapply के बारे में का उपयोग कर एक दृष्टिकोण है?

x <- mtcars[1:3,1:3] 
y <- mtcars[1:3,8:10] 

mypaste <- function(x,y) paste(x, "(", y, ")", sep="") 

mapply(mypaste, x,y) 

    mpg  cyl disp  
[1,] "21(0)" "6(1)" "160(4)" 
[2,] "21(0)" "6(1)" "160(4)" 
[3,] "22.8(1)" "4(1)" "108(4)" 
+0

बहुत सुरुचिपूर्ण !!! – Ramnath

+1

धन्यवाद! मुझे आपका 'ldply' समाधान भी पसंद आया। इसी तरह के स्वाद, बस थोड़ा हैडली हथौड़ा के साथ हलचल। –

+0

मेरा पसंदीदा समाधान। धन्यवाद। सरल और सुंदर। बहुत रचनात्मक सोच। –

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