2011-08-25 32 views
5

İki csv dosyasına sahibim.R'de iki csv dosyasını nasıl birleştirebilirim?

Dosya bir iki sütun bulunur:

DD1 abct 
DD2 geate 
DD3 watec 
DD4 wwwca21 
DD5 bate789 

Dosya iki olan bir sütun:

abct 
geate 
bate789 

ben yani dosyanın iki ile eşleşti olanlar

içerecek şekilde kesilmiş bir dosyayı bir tane almak istiyorum
DD1 abct 
DD2 geate 
DD5 bate789 

R ile nasıl yapılacağını bana bildirir misiniz?

Yeni R.

için
+1

Bunun için doğru terim "iç birleştirme" dir. Başlıkta "kesiliyor" olarak adlandırmak, gelecekteki arama çabalarına yardımcı olmayacak. –

cevap

7

Öncelikle read.table dosyaları okuyun:

merged <- merge(file1, file2) 

Ve sonucu yazma:

file1 <- read.table("file1.csv", col.names=c("FOO", "BAR")) 
file2 <- read.table("file2.csv", col.names=c("BAR")) 

Sonra bunları birleştirmek

write.table(merged, "merged.csv") 
+0

İki nokta daha: daha karmaşık işlemler için, bkz: http://stackoverflow.com/questions/1299871/how-to-join-data-frames-in-r-inner-outer-left-right – Anatoliy

+0

Gerçekten büyük dosyaları, R en iyi seçenek olmayabilir, '' katılmak '' (veya 'awk' /' sed') gibi komut satırı araçları daha hızlı olacaktır. – Anatoliy

0

Bu reklam % olarak% olarak yaparak bunu yapmak için doğru yolu. Bu dosyalarda

okuma

datf1 <- read.table("file1.csv") #two column file 
datf2 <- read.table("file2.csv") #one column file 

istediğiniz satırları seçin tamamen R. içinde en hızlı şekilde hakkında olacak ...% olarak% birinci değişkenin uzunluk ve bir mantıksal vektör yapar Bir öğe hem bağımsız değişkenlerde hem de FALSE ise DOĞRUdur. Gerçekten orijinal verilerin üzerine ve yeni bir file1 yapmamalı çünkü

datf1 <- datf1[datf1[,2] %in% datf2[,1],] 

yazma dışarı ... Ben Dosya1 dosya adını değiştirdi.

write.table(datf1, "file3.csv", sep = ',', row.names = FALSE, quote = FALSE) 
İlgili konular