2011-09-16 21 views
7

Quiero cbind dos marcos de datos y eliminar columnas duplicadas. Por ejemplo:Combinar dos marcos de datos y eliminar columnas duplicadas

df1 <- data.frame(var1=c('a','b','c'), var2=c(1,2,3)) 
df2 <- data.frame(var1=c('a','b','c'), var3=c(2,4,6)) 

cbind(df1,df2) #this creates a data frame in which column var1 is duplicated 

Quiero crear una trama de datos con columnas var1, var2 y var3, en el que la columna var2 no se repite.

Respuesta

8

merge hará ese trabajo.

intento:

merge(df1, df2) 
+2

Hay no está en contradicción con el ejemplo en cuestión, pero si hubiera valores desviados en var1, esos casos se eliminarían con la combinación; p.ej. intente 'df2 <-data.frame (var1 = c ('a', 'b', 'd'), var3 = c (2,4,6))'. Esto es relevante para los casos en que los nombres de las variables se duplican, pero los datos respectivos no lo son. –

1

En caso de que se hereda de otro conjunto de datos y termina con columnas duplicadas de alguna manera y quiere tratar con ellos, esta es una buena manera de hacerlo:

for (name in unique(names(testframe))) { 
    if (length(which(names(testframe)==name)) > 1) { 
    ## Deal with duplicates here. In this example 
    ## just print name and column #s of duplicates: 
    print(name) 
    print(which(names(testframe)==name)) 
    } 
} 
Cuestiones relacionadas