2013-06-29 21 views
10

अगर मैं इस तरह के रूप में दो डेटा फ्रेम, है:"पंक्ति। नाम" कॉलम को जोड़ने के बिना पंक्ति नाम से डेटाफ्रेम कैसे विलय करता है?

df1 = data.frame(x=1:3,y=1:3,row.names=c('r1','r2','r3')) 
df2 = data.frame(z=5:7,row.names=c('r5','r6','r7')) 

(

R> df1 
    x y 
r1 1 1 
r2 2 2 
r3 3 3 

R> df2 
    z 
r5 5 
r6 6 
r7 7 

), मैं उन्हें, पंक्ति नामों से विलय करने के लिए सब कुछ रखने चाहते हैं (इसलिए एक बाहरी में शामिल होने, या सभी = टी)। यह करता है:

merged.df <- merge(df1,df2,all=T,by='row.names') 
R> merged.df 
    Row.names x y z 
1  r1 1 1 NA 
2  r2 2 2 NA 
3  r3 3 3 NA 
4  r5 NA NA 5 
5  r6 NA NA 6 
6  r7 NA NA 7 

लेकिन मैं आउटपुट पंक्ति नाम आउटपुट डेटाफ्रेम (merged.df) में पंक्ति नाम होना चाहता हूं।

मैं कर सकते हैं:

rownames(merged.df) <- merged.df[[1]] 
merged.df <- merged.df[-1] 

जो काम करता है, लेकिन असजीला और कड़ी याद करने लगता है। किसी को क्लीनर तरीके से पता है?

+3

आपका उदाहरण डेटा.फ्रेम में आम तौर पर कोई पंक्ति नहीं है, 'मर्ज' के लिए काफी असामान्य उदाहरण है, क्या जानबूझकर था? – flodel

+0

जानबूझकर नहीं, इसके बारे में खेद है। – user116293

उत्तर

1

merge की मदद से:

तो मिलान शामिल पंक्ति के नाम, एक अतिरिक्त चरित्र स्तंभ कहा जाता है Row.names बाईं पर जोड़ा जाता है, और सभी मामलों में परिणाम 'स्वचालित' पंक्ति है नाम।

तो यह स्पष्ट है कि आप कम से कम merge का उपयोग कर Row.names स्तंभ से बचने नहीं कर सकते। लेकिन शायद इस कॉलम को हटाने के लिए आप इंडेक्स द्वारा नाम से सबसेट कर सकते हैं। उदाहरण के लिए:

dd <- merge(df1,df2,by=0,all=TRUE) ## by=0 easier to write than row.names , 
            ## TRUE is cleaner than T 

तो मैं इस तरह सबसेट के row.names का उपयोग करें:

res <- subset(dd,select=-c(Row.names)) 
rownames(res) <- dd[,'Row.names'] 
    x y z 
1 1 1 NA 
2 2 2 NA 
3 3 3 NA 
4 NA NA 5 
5 NA NA 6 
6 NA NA 7 
11

सुनिश्चित नहीं हैं कि अगर यह याद करने के लिए किसी भी आसान है, लेकिन आप transform का उपयोग कर एक कदम में यह सब कर सकते हैं।

transform(merge(df1,df2,by=0,all=TRUE), row.names=Row.names, Row.names=NULL) 
# x y z 
#r1 1 1 NA 
#r2 2 2 NA 
#r3 3 3 NA 
#r5 NA NA 5 
#r6 NA NA 6 
#r7 NA NA 7 
+0

+1! याद रखने की कोशिश करें ... – agstudy

+0

अच्छा, यह कुछ 'भीतर' नहीं कर सकता है। –

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