2012-11-08 30 views
10

sonuç olarak diğer sütun alma bu yapısınıfarklı veri tezgahları üzerinde birden çok sütun Eşleşen ve iki büyük veri çerçeveleri, bir (<code>df1</code>) var

chr init 
1 12 25289552 
2 3 180418785 
3 3 180434779 

diğer (df2) sahip olmasıdır, bu

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 
sahip

Yapmaya çalıştığım şey,

numaralı bilginin V3 df2 değerini df1'a eklemektir.

Her ikisini de R'ye yüklemeyi ve ardından eşlemeyi kullanarak bir for döngüsü yapmayı deniyorum ama işe yaramıyor. Bunu yapmak için özel bir yol biliyor musunuz? Ben awk veya

cevap

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 

İstediğiniz çıktı yolu almak için kullanın göstermek o

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

Evet, bu nedir istediğim nokta ben dikkate almak zorunda olduğunu kromozom da, belki de bu gibi bir şey (df1, df2, by.x = c ('chr', 'init'), byy = c ('V1', V2 ') [, c (2,1, 4)] – user976991

+0

Tam olarak, sadece 'chr' ve 'V1' argümanlarına ekleyerek bunları dikkate alacaktır: D Yararlı cevaplar verin ve yararlı bulursanız bunlardan birini kabul edin: D –

0

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

istediğini veriyor mu benzer bir şey kullanarak yapmak da açığım?

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

"df1" öğesinde, df2'de bulunmayan anahtar değerler varsa, bunun çalışmayacağını unutmayın. "Değiştirme 3 satır, veri 4" gibi bir hata alırsınız. Http://stackoverflow.com/questions/1299871/how-to-join-merge-data-frames-inner-outer-left-right/38130460#38130460, 'match()' kullanarak bir sol birleştirme uygulaması için bkz. – bgoldst