2011-08-25 24 views
5

Ho due file CSV.Come posso unire internamente due file CSV in R?

File ha due colonne:

DD1 abct 
DD2 geate 
DD3 watec 
DD4 wwwca21 
DD5 bate789 

File due ha una colonna:

abct 
geate 
bate789 

voglio ottenere un file troncato uno per includere coloro che abbinato con due file, vale a dire

DD1 abct 
DD2 geate 
DD5 bate789 

Potresti farmi sapere come farlo con R?

Nuovo a R.

+1

Il termine corretto per questo è un "inner join". Chiamarlo "troncando" nel titolo non aiuterà i futuri sforzi di ricerca. –

risposta

7

In primo luogo, leggere i file con il read.table:

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

Poi li si fondono:

merged <- merge(file1, file2) 

e scrivere il risultato:

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

Altri due punti: per operazioni più sofisticate, vedi: http://stackoverflow.com/questions/1299871/how-to-join-data-frames-in-r-inner-outer-left-right – Anatoliy

+0

E per davvero grandi file, R potrebbe non essere l'opzione migliore, i comandi da riga di comando come 'join' (o' awk'/'sed') saranno più veloci, credo. – Anatoliy

0

Questo è un annuncio modo iretto di farlo facendo% in%. Questo sarà di circa il modo più veloce interamente all'interno R.

lettura nei file

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

selezionare le righe che si desidera ...% in% fa un vettore logico che è la lunghezza del primo argomento e è VERO quando un oggetto è in entrambi gli argomenti e FALSE in caso contrario.

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

write it out ... ho cambiato il nome del file da file1 perché davvero non dovrebbe sovrascrivere i dati originali e fare un nuovo file1.

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