2011-08-25 27 views
5

Tengo dos archivos csv.¿Cómo puedo unir internamente dos archivos csv en R?

un archivo tiene dos columnas:

DD1 abct 
DD2 geate 
DD3 watec 
DD4 wwwca21 
DD5 bate789 

archivo dos tiene una columna:

abct 
geate 
bate789 

Quiero conseguir un archivo truncada uno para incluir a aquellos que coincidía con el archivo de dos, es decir

DD1 abct 
DD2 geate 
DD5 bate789 

¿Podría dejarme saber cómo hacerlo con R?

Nuevo en R.

+1

El término correcto para esto es una "unión interna". Llamarlo "truncado" en el título no ayudará a los futuros esfuerzos de búsqueda. –

Respuesta

7

primer lugar, leer los archivos con la read.table:

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

A continuación combinarlos:

merged <- merge(file1, file2) 

y escribir el resultado:

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

Dos puntos más: para operaciones más sofisticadas, ver: http://stackoverflow.com/questions/1299871/how-to-join-data-frames-in-r-inner-outer-left-right – Anatoliy

+0

Y para muy grandes archivos, R podría no ser la mejor opción, utilidades de línea de comandos como 'join' (o' awk'/'sed') serán más rápidas, creo. – Anatoliy

0

Esto es anuncio forma directa de hacerlo haciendo% en%. Esta será acerca de la manera más rápida enteramente dentro R.

lectura en los archivos

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

seleccione las filas que desea ...% en% hace un vector lógico que es la longitud del primer argumento y es VERDADERO cuando un ítem está en ambos argumentos y FALSO de lo contrario.

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

escritura hacia fuera ... Me cambió el nombre de archivo de fichero1 porque realmente no se deben sobrescribir los datos originales y hacer una nueva fichero1.

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