2012-11-08 15 views
10

मैं दो बड़े डेटा फ्रेम, एक (df1) मिल गया के रूप में अन्य स्तंभ हो रही इस संरचनाअलग डेटा फ्रेम पर एकाधिक स्तंभों मिलान और परिणाम

chr init 
1 12 25289552 
2 3 180418785 
3 3 180434779 

अन्य (df2) है इस

V1 V2  V3 
10 1  69094 medium 
11 1  69094 medium 
12 12 25289552 high 
13 1  69095 medium 
14 3 180418785 medium 
15 3 180434779 low 
है

जो मैं करने की कोशिश कर रहा हूं वह df2df1 के कॉलम को

की जानकारी प्राप्त करने के लिए है।

मैं आर में लोड करने की कोशिश कर रहा हूं और फिर मिलान का उपयोग कर लूप के लिए कर रहा हूं लेकिन यह काम नहीं करता है। क्या आप ऐसा करने के लिए कोई विशेष तरीका जानते हैं? मैं भी awk या इसी तरह

उत्तर

12

उपयोग merge

df1 <- read.table(text=' chr init 
1 12 25289552 
2 3 180418785 
3 3 180434779', header=TRUE) 


df2 <- read.table(text=' V1 V2  V3 
10 1  69094 medium 
11 1  69094 medium 
12 12 25289552 high 
13 1  69095 medium 
14 3 180418785 medium 
15 3 180434779 low', header=TRUE) 


merge(df1, df2, by.x='init', by.y='V2') # this works! 
     init chr V1  V3 
1 25289552 12 12 high 
2 180418785 3 3 medium 
3 180434779 3 3 low 

अपने वांछित उत्पादन प्राप्त करने के लिए जिस तरह से आपको बताएंगे कि यह

output <- merge(df1, df2, by.x='init', by.y='V2')[, c(2,1,4)] 
colnames(output)[3] <- 'Mut' 
output 
    chr  init Mut 
1 12 25289552 high 
2 3 180418785 medium 
3 3 180434779 low 
+0

हाँ, यह है कि मैं क्या चाहता हूँ, बिंदु मैं ध्यान में रखना है कि है गुणसूत्र भी, तो हो सकता है कि कुछ विलय (डीएफ 1, डीएफ 2, by.x = c ('chr', 'init'), by.y = c ('V1', V2 ') [, c (2,1, 4)] – user976991

+0

बिल्कुल, केवल तर्कों के लिए 'chr' और 'V1' जोड़ना उन्हें ध्यान में रखेगा: डी ऊपर विचार करें उपयोगी उत्तर दें और यदि आप इसे उपयोगी पाते हैं तो उनमें से एक को स्वीकार करें: डी –

0

df3 <- merge(df1, df2, by.x = "init", by.y = "V2") 
df3 <- df3[-3] 
colnames(df3)[3] <- "Mut" 

आप क्या चाहते हैं आप दे करता है कुछ का उपयोग कर के लिए खुला रहा हूँ?

2
df1 <- read.table(textConnection(" chr init 
1 12 25289552 
2 3 180418785 
3 3 180434779"), header=T) 

df2 <- read.table(textConnection(" V1 V2  V3 
10 1  69094 medium 
11 1  69094 medium 
12 12 25289552 high 
13 1  69095 medium 
14 3 180418785 medium 
15 3 180434779 low"), header=T) 

# You have to select the values of df2$V3 such as their corresponding V2 
# are equal to the values of df1$init 
df1$Mut <- df2$V3[ df2$V2 %in% df1$init] 

df1 
    chr  init Mut 
1 12 25289552 high 
2 3 180418785 medium 
3 3 180434779 low 
+0

ध्यान दें कि 'df2' से अनुपस्थित होने वाले 'df1' में कोई महत्वपूर्ण मान होने पर यह काम नहीं करेगा। आपको एक त्रुटि मिलेगी जैसे "प्रतिस्थापन में 3 पंक्तियां हैं, डेटा 4 है"। 'Match()' का उपयोग करके कार्यान्वयन में बाएं जुड़ने के लिए http://stackoverflow.com/questions/1299871/how-to-join-merge-data-frames-inner-outer-left-right/38130460#38130460 देखें। – bgoldst

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