Soy un novato en R y estoy tratando de eliminar columnas duplicadas de un marco de datos bastante amplio (50K filas, 215 columnas). El marco tiene una mezcla de variables discretas continuas y categóricas.Identificación de columnas duplicadas en un marco de datos R
Mi enfoque ha sido generar una tabla para cada columna en el cuadro en una lista, a continuación, utilizar la función de duplicated()
encontrar filas de la lista que son duplicados, de la siguiente manera:
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))
Esto no es t muy eficiente, especialmente para grandes variables continuas. Sin embargo, he ido por este camino porque he sido incapaz de conseguir el mismo resultado utilizando resumen (nota, el siguiente asume un original testframe
duplicados que contienen):
summaries=apply(testframe,2,summary)
dups=which(duplicated(summaries))
testframe <- subset(testframe, select = -c(dups))
Si ejecuta este código podrás ver que solo elimina el primer duplicado encontrado. Supongo que es porque estoy haciendo algo mal. ¿Alguien puede señalar dónde estoy yendo mal o, mejor aún, señalarme una mejor manera de eliminar las columnas duplicadas de un marco de datos?
Además de @kohske 's sugerencia de utilizar 'digest', podría ser suficiente usar' C' en lugar de 'su mmary' como la función 'lapply'. – BenBarnes
Se debe tener en cuenta que el resumen de los vectores de caracteres producirá el mismo resumen aunque sean diferentes. Esto se debe a que el resumen en un vector de caracteres solo muestra la longitud del vector – hshihab