Найти дублированные строки (на основе 2 столбцов) в Data Frame в R
У меня есть кадр данных в R, который выглядит так:
| 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 |
Я хочу знать, есть ли дубликаты относительно комбинации RIC и Date. Существует ли для этого функция для R?
Ответы
Ответ 1
Вы всегда можете попробовать просто передать эти первые два столбца функции duplicated
:
duplicated(dat[,1:2])
Предполагая, что ваш фрейм данных называется dat
. Для получения дополнительной информации мы можем обратиться к файлам справки для функции duplicated
, набрав ?duplicated
на консоли. Это предоставит следующие предложения:
Определяет, какие элементы вектора или фрейма данных являются дубликатами элементы с меньшими индексами и возвращает логический вектор указывая, какие элементы (строки) дублируются.
Итак, duplicated
возвращает логический вектор, который затем можно использовать для извлечения подмножества dat
:
ind <- duplicated(dat[,1:2])
dat[ind,]
или вы можете пропустить отдельный шаг назначения и просто использовать:
dat[duplicated(dat[,1:2]),]
Ответ 2
dplyr настолько хорош для такого рода вещей:
library(dplyr)
yourDataFrame %>%
distinct(RIC, Date, .keep_all = TRUE)
( ".keep_all" является необязательным, если он не используется, он будет возвращать только деблокированные 2 столбца. Когда он используется, он возвращает выделенный полный фрейм данных)
Ответ 3
Я думаю, что то, что вы ищете, - это способ вернуть кадр данных дублированных строк в том же формате, что и исходные данные. Возможно, это более элегантный способ сделать это, но это работает:
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`
Ответ 4
Если вы хотите удалить дубликаты записей на основе значений столбцов Дата и Состояние в наборе данных 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)