Eliminar unidades duplicadas del marco de datos
Estoy trabajando en un gran conjunto de datos con n covariables. Muchas de las filas son duplicadas. Para identificar los duplicados necesito usar un subconjunto de las covariables para crear una variable de identificación. Es decir, (n-x) las covariables son irrelevantes. Quiero concatenar los valores en las covariables x para identificar de forma única las observaciones y eliminar los duplicados.
set.seed(1234)
UNIT <- c(1,1,1,1,2,2,2,3,3,3,4,4,4,5,6,6,6)
DATE <- c("1/1/2010","1/1/2010","1/1/2010","1/2/2012","1/2/2009","1/2/2004","1/2/2005","1/2/2005",
"1/1/2011","1/1/2011","1/1/2011","1/1/2009","1/1/2008","1/1/2008","1/1/2012","1/1/2013",
"1/1/2012")
OUT1 <- c(300,400,400,400,600,700,700,800,800,800,900,700,700,100,100,100,500)
JUNK1 <- c(rnorm(17,0,1))
JUNK2 <- c(rnorm(17,0,1))
test = data.frame(UNIT,DATE,OUT1,JUNK1,JUNK2)
'prueba' es un marco de datos de muestra. Las variables que debo usar para identificar de forma única las observaciones son 'UNIDAD', 'FECHA' y 'OUT1'. Por ejemplo,
head(test)
UNIT DATE OUT1 JUNK1 JUNK2
1 1 1/1/2010 300 -1.2070657 -0.9111954
2 1 1/1/2010 400 0.2774292 -0.8371717
3 1 1/1/2010 400 1.0844412 2.4158352
4 1 1/2/2012 400 -2.3456977 0.1340882
5 2 1/2/2009 600 0.4291247 -0.4906859
6 2 1/2/2004 700 0.5060559 -0.4405479
Las observaciones 1 y 4 no son un duplicado en el conjunto de datos. Las observaciones 2 y 3 son duplicados. El nuevo conjunto de datos que quiero crear mantendría las observaciones 1 y 4 ysolo uno de 2 y 3. La solución que he probado es:
subset(test, !duplicated(c(UNIT,DATE,OUT1)))
Lo que desafortunadamente no hace el truco:
UNIT DATE OUT1 JUNK1 JUNK2
1 1 1/1/2010 300 -1.20706575 -0.9111954
5 2 1/2/2009 600 0.42912469 -0.4906859
8 3 1/2/2005 800 -0.54663186 -0.6937202
11 4 1/1/2011 900 -0.47719270 -1.0236557
14 5 1/1/2008 100 0.06445882 1.1022975
15 6 1/1/2012 100 0.95949406 -0.4755931
Aunque ignora las variables irrelevantes (JUNK1, JUNK2), la técnica es demasiado codiciosa. El nuevo conjunto de datos debe contener tres observaciones en la unidad uno porque hay tres combinaciones únicas de UNIT + DATE + OUT1 cuando UNIT = 1. ¿Hay alguna forma de lograr esto sin escribir una función?