filtrar - Encuentre filas duplicadas(basadas en 2 columnas) en el Marco de datos en R
filtrar data frame r (4)
Tengo un marco de datos en R que se parece a:
| RIC | Date | Open |
|--------|---------------------|--------|
| S1A.PA | 2011-06-30 20:00:00 | 23.7 |
| ABC.PA | 2011-07-03 20:00:00 | 24.31 |
| EFG.PA | 2011-07-04 20:00:00 | 24.495 |
| S1A.PA | 2011-07-05 20:00:00 | 24.23 |
Quiero saber si hay duplicados con respecto a la combinación de RIC y fecha. ¿Hay una función para eso en R?
Creo que lo que está buscando es una forma de devolver un marco de datos de las filas duplicadas en el mismo formato que sus datos originales. Probablemente hay una forma más elegante de hacer esto, pero esto funciona:
dup <- data.frame(as.numeric(duplicated(df$var))) #creates df with binary var for duplicated rows
colnames(dup) <- c("dup") #renames column for simplicity
df2 <- cbind(df, dup) #bind to original df
df3 <- subset(df2, dup == 1) #subsets df using binary var for duplicated`
Si desea eliminar registros duplicados basados en valores de Columnas Fecha y Estado en el conjunto de datos data.frame:
#Indexes of the duplicate rows that will be removed:
duplicate_indexes <- which(duplicated(dataset[c(''Date'', ''State'')]),)
duplicate_indexes
#new_uniq will contain unique dataset without the duplicates.
new_uniq <- dataset[!duplicated(dataset[c(''Date'', ''State'')]),]
View(new_uniq)
Siempre puede intentar simplemente pasar esas dos primeras columnas a la función duplicated
:
duplicated(dat[,1:2])
asumiendo que su marco de datos se llama dat
. Para obtener más información, podemos consultar los archivos de ayuda para la función duplicated
escribiendo ?duplicated
en la consola. Esto proporcionará las siguientes oraciones:
Determina qué elementos de un vector o marco de datos son duplicados de elementos con subíndices más pequeños y devuelve un vector lógico que indica qué elementos (filas) son duplicados.
Así, duplicated
devuelve un vector lógico, que luego podemos usar para extraer un subconjunto de dat
:
ind <- duplicated(dat[,1:2])
dat[ind,]
o puede omitir el paso de asignación separado y simplemente usar:
dat[duplicated(dat[,1:2]),]
dplyr es mucho mejor para este tipo de cosas:
library(dplyr)
yourDataFrame %>%
distinct(RIC, Date, .keep_all = TRUE)
(el ".keep_all es opcional. si no se usa, devolverá solo las 2 columnas deducidas. cuando se use, devolverá el marco de datos completo deducido)