2011-09-16 25 views
7

Voglio cbind due frame di dati e rimuovere le colonne duplicate. Ad esempio:Combina due frame di dati e rimuove le colonne duplicate

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 

voglio creare un frame di dati con colonne var1, var2 e var3, in quale colonna var2 non viene ripetuto.

risposta

8

merge farà questo lavoro.

prova:

merge(df1, df2) 
+2

Ci non è in contraddizione con l'esempio in questione, ma se ci dovessero essere valori devianti in var1, quei casi verrebbero cancellati con unione; per esempio. prova 'df2 <-data.frame (var1 = c ('a', 'b', 'd'), var3 = c (2,4,6))'. Questo è rilevante per i casi in cui i nomi delle variabili sono duplicati, ma i rispettivi dati non lo sono. –

1

Nel caso in cui si eredita di qualcun altro set di dati e finisce con colonne duplicati in qualche modo e vuole trattare con loro, questo è un bel modo per farlo:

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)) 
    } 
} 
Problemi correlati