2011-08-25 36 views
5

Mam dwa pliki CSV.Jak mogę połączyć dwa pliki CSV w R?

jeden plik posiada dwie kolumny:

DD1 abct 
DD2 geate 
DD3 watec 
DD4 wwwca21 
DD5 bate789 

Plik dwa ma jedna kolumna:

abct 
geate 
bate789 

chcę uzyskać obcięty jeden plik do obejmują te, które dopasowane pliku dwa, tj

DD1 abct 
DD2 geate 
DD5 bate789 

Czy możesz mi powiedzieć, jak to zrobić z R?

Nowością R.

+1

Właściwy termin to "połączenie wewnętrzne". Nazwanie tego tytułem "obcięciem" nie pomoże przyszłym poszukiwaniom. –

Odpowiedz

7

pierwsze, odczytać pliki z read.table:

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

Następnie połączyć je:

merged <- merge(file1, file2) 

i napisać wynik:

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

Dwa kolejne punkty: dla bardziej wyrafinowanych operacji, zobacz: http://stackoverflow.com/questions/1299871/how-to-join-data-frames-in-r-inner-outer-left-right – Anatoliy

+0

A dla naprawdę dużych pliki, R może nie być najlepszą opcją, a wiersze poleceń takie jak 'join' (lub' awk'/'sed') będą szybsze, jak sądzę. – Anatoliy

0

To jest reklama poprawny sposób na zrobienie tego, wykonując% w%. To będzie o najszybszy sposób całkowicie wewnątrz R.

odczytu w plikach

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

wybrać wiersze, które chcesz ...% w% sprawia, że ​​logiczne wektor jest długość pierwszego argumentu i ma wartość PRAWDA, gdy element występuje w obu argumentach, a FALSE w przeciwnym razie.

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

write it out ... Zmieniłem nazwę pliku z plik1, bo tak naprawdę nie powinny zastępować oryginalne dane i zrobić nowy plik1.

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