studio seleccionar repetidos quitar identificar filas eliminar duplicated duplicados duplicadas datos contar como columnas r duplicates unique

seleccionar - identificar duplicados en r



Extraiga las filas que tienen duplicados para cierta columna, pero son únicos en otra columna (3)

Estoy haciendo algo de codificación en R. Me gustaría mostrar las filas que tienen duplicados para las columnas ID y NAME, pero tienen diferentes valores para AGE.

Por ejemplo, tengo esta tabla:

ID | NAME | AGE 111| Mark| 22 222| Anne| 21 333| Chery| 30 444| Megan| 16 555| Charles| 37 111| Mark| 23 222| Anne| 22 333| Chery| 30 111| Mark| 22

A partir de ahora tengo este código:

readfile <- read.csv(file=''/home/user/shane/names.csv'') dat <- data.frame(ID=c(readfile$ID),NAME=c(readfile$NAME),AGE=c(readfile$AGE)) nam <- duplicated(dat[,c(''ID'',''NAME)]) | duplicated(dat[,c(''ID'',''NAME], fromLast = TRUE) readfile[nam,]

La salida se ve así:

ID | NAME | AGE 111| Mark| 22 222| Anne| 21 333| Chery| 30 111| Mark| 23 222| Anne| 22 333| Chery| 30 111| Mark| 22

Me gustaría que la salida sea:

ID | NAME | AGE 111| Mark| 22 222| Anne| 21 111| Mark| 23 222| Anne| 22 111| Mark| 22

Me gustaría eliminar las columnas con ID = 333 ya que tienen el mismo valor en Age. ¿alguien tiene una sugerencia?


Acabo de ajustar tu código :)

dat <- data.frame(ID=c(111,222,333,444,555,111,222,333,111), NAME=c(''Mark'',''Anne'',''Chery'',''Megan'',''Charles'',''Mark'',''Anne''‌​,''Chery'',''Mark''), AGE=c(22,21,30,16,37,23,22,30,22)) library(plyr) dat1 <- ddply(dat,.(ID,NAME, AGE),nrow) dat2 <- merge(dat1,dat,by=c("ID","NAME","AGE")) dat3 <- dat2[!(!duplicated(dat2[,1:2], fromLast=T) & !duplicated(dat2[,1:2])),] dat3[dat3$ID %in% dat3[dat3$V1==1,1],1:3]

¡Espero que esto ayude!

(editó esta solución después de que @ shia1717 mencionó su requisito específico - consulte la sección de comentarios para más detalles)


Aquí hay una opción con data.table

library(data.table) setDT(dat)[, .SD[.N >1 & !sum(duplicated(AGE))], by = .(ID, NAME)] # ID NAME AGE #1: 111 Mark 22 #2: 111 Mark 23 #3: 222 Anne 21 #4: 222 Anne 22


Una solución dplyr :

library(dplyr) dat %>% group_by(ID, NAME) %>% filter(n() > 1, sum(duplicated(AGE)) == 0) %>% ungroup() # A tibble: 4 x 3 ID NAME AGE <dbl> <fctr> <dbl> 1 111 Mark 22 2 222 Anne 21 3 111 Mark 23 4 222 Anne 22

Usé los datos amablemente provistos por @Prem.