आर

2012-04-27 24 views
8

में किसी अन्य डेटा के अंत में एक डेटाफ्रेम जोड़ना मुझे किसी अन्य डेटा फ्रेम के नीचे एक जोड़ने में कठिनाई हो रही है।आर

मेरे पास एक डेटा फ्रेम है (चलिए इसे डीएफ 1 कहते हैं) जिसमें 1 पंक्ति और 5 कॉलम हैं। मेरे पास एक और डेटाफ्रेम है (इसे डीएफ 2 कहते हैं) जिसमें 50 पंक्तियां और 5 कॉलम हैं। मैंने इसे सेट अप किया है कि दोनों डेटा फ्रेम मिलान के बीच कॉलम - उनके पास समान कॉलम हैं। वास्तव में, डीएफ 1 डीएफ 2 पर आधारित गणना है।

row.names  pt1  pt2  pt3  pt4 
    SNP1   AA  AG  AG  AA  
    SNP2   CT  CT  TC  CC 
    SNP3   GG  CG  CG  <NA> 
    SNP4   AA  GG  AG  AA 
    SNP5   <NA> <NA> <NA> <NA> 

DF1 वास्तविक डेटा बिंदुओं की संख्या (मूल्यों की # है कि माना जाता है:

row.names  pt1  pt2  pt3  pt4 
    calc   0.93 0.45 0.28 0.54 

यह वही है DF2 लग रहा है की तरह है:

यह DF1 कैसा दिखाई देता है है गुम नहीं है) संभावित मूल्यों की कुल संख्या से विभाजित।

अतः .. मैं DF2 की तह तक DF1 जोड़ने के लिए इस तरह लग रहे हैं:

row.names  pt1  pt2  pt3  pt4 
    SNP1   AA  AG  AG  AA  
    SNP2   CT  CT  TC  CC 
    SNP3   GG  CG  CG  <NA> 
    SNP4   AA  GG  AG  AA 
    SNP5   <NA> <NA> <NA> <NA> 
    calc   0.93 0.45 0.28 0.54 

जब मैं का उपयोग कर की कोशिश की

both.dfs <- rbind(DF1, DF2) # DF1 is first here 

DF1 DF2 में पहली पंक्ति है। मुझे यह आखिरी पंक्ति होने की ज़रूरत है।

Warning messages: 
1: In `[<-.factor`(`*tmp*`, iseq, value = 0.84) : 
    invalid factor level, NAs generated 
2: In `[<-.factor`(`*tmp*`, iseq, value = 0.84) : 
    invalid factor level, NAs generated 
3: In `[<-.factor`(`*tmp*`, iseq, value = 0.84) : 
    invalid factor level, NAs generated 
4: In `[<-.factor`(`*tmp*`, iseq, value = 0.74) : 
    invalid factor level, NAs generated 

मैं मर्ज की कोशिश की है, मैं DF2 को एक नई पंक्ति जोड़ने और फिर के मूल्यों में subbing की कोशिश की है:

जब मैं

both.dfs <- rbind(DF2, DF1) # DF2 is first here 

का उपयोग कर की कोशिश की मैं कोई त्रुटि मिलती है डीएफ 2..कुछ काम नहीं करता! मुझे कुछ मदद की बेहद जरूरी ज़रूरत है! किसी को?

+0

संक्षिप्त उत्तर आप कर सकते हैं (या कम से कम नहीं आप shouldn है 'टी)। डेटा फ्रेम के कॉलम परमाणु वैक्टर (यानी एक ही डेटा प्रकार) होना चाहिए, और आप संख्यात्मक (डीएफ 1) और चरित्र/कारक (डीएफ 2) मिश्रण करने की कोशिश कर रहे हैं। – joran

+0

यदि "डीएफ 2 के कॉलम कारकों की बजाय वर्ण हैं तो यह" काम करेगा "। लेकिन आपको अभी भी इन डेटा सेट को जोड़ने का एक अलग तरीका मिलना चाहिए। – joran

उत्तर

6

यहाँ आपको क्या करना चाहिए:

DFtranspose <- cbind(t(DF1[2, ]), t(DF2)) 
rownames(DFtranspose) <- DF1[1, ] 
3

मैं टिप्पणियों से सहमत हूं कि यह शायद एक बुरा विचार है, लेकिन यहां आप यह कैसे कर सकते हैं।

सबसे पहले, सूची-आधारित डेटा के साथ। फ्रेम इस फैशन में बहुत अच्छी तरह से गठबंधन नहीं करेगा। यदि आप डेटा को आरबीआईंड करना चाहते हैं, तो आप उन्हें मैट्रिक्स में परिवर्तित करने से बेहतर होंगे। ध्यान दें कि आपको अपने डेटा फ्रेम की प्रत्येक पंक्ति के लिए एक ही प्रकार का चयन करना होगा, इसलिए यदि आप वर्णों से बंधे हैं तो आप अपनी संख्याओं को संख्याओं के रूप में नहीं रख सकते हैं। आप एक चरित्र के रूप में सब कुछ के इलाज के लिए तैयार हैं, तो यह एक जाना दे:

> df1 <- data.frame(pt1="a", pt2="b", row.names=1) 
> rownames(df1) <- "e" 
> df2 <- data.frame(letters[1:4], pt1=1:4, pt2=2:5, row.names=1) 
> rbind(as.matrix(df2), as.matrix(df1)) 
    pt1 pt2 
a "1" "2" 
b "2" "3" 
c "3" "4" 
d "4" "5" 
e "a" "b"