Sono un novellino R e sto tentando di rimuovere le colonne duplicate da un ampio dataframe (50K righe, 215 colonne). Il frame ha un mix di variabili discrete continue e categoriali.Identificazione di colonne duplicate in un frame di dati R
Il mio approccio è stato quello di generare una tabella per ogni colonna nel fotogramma in un elenco, quindi utilizzare la funzione duplicated()
per trovare le righe della lista che sono duplicati, come segue:
age=18:29
height=c(76.1,77,78.1,78.2,78.8,79.7,79.9,81.1,81.2,81.8,82.8,83.5)
gender=c("M","F","M","M","F","F","M","M","F","M","F","M")
testframe = data.frame(age=age,height=height,height2=height,gender=gender,gender2=gender)
tables=apply(testframe,2,table)
dups=which(duplicated(tables))
testframe <- subset(testframe, select = -c(dups))
Questo isn' molto efficiente, specialmente per grandi variabili continue. Tuttavia, ho intrapreso questa strada perché sono stato in grado di ottenere lo stesso risultato utilizzando sintesi (nota, il seguente assume un originale testframe
contenenti duplicati):
summaries=apply(testframe,2,summary)
dups=which(duplicated(summaries))
testframe <- subset(testframe, select = -c(dups))
Se si esegue il codice che avrete vederlo rimuove solo il primo duplicato trovato. Presumo questo perché sto facendo qualcosa di sbagliato. Qualcuno può indicare dove sto andando male o, ancora meglio, indicarmi la direzione di un modo migliore per rimuovere le colonne duplicate da un dataframe?
Oltre a @kohske 's suggerimento di usare 'digest', potrebbe essere sufficiente utilizzare' C' invece di 'su mmary' come la funzione 'lapply'. – BenBarnes
Va notato che il riepilogo per i vettori di caratteri produrrà lo stesso sommario anche se sono diversi. Questo perché il riassunto su un vettore di caratteri emette solo la lunghezza del vettore – hshihab