R duplicated
возвращает вектор, показывающий, является ли каждый элемент вектора или кадра данных дубликатом элемента с меньшим нижним индексом. Поэтому, если строки 3, 4 и 5 5-строчного фрейма данных совпадают, duplicated
я получу вектор
FALSE, FALSE, FALSE, TRUE, TRUE
Но в этом случае я действительно хочу получить
FALSE, FALSE, TRUE, TRUE, TRUE
то есть я хочу знать, дублируется ли строка строкой с большим нижним индексом.
источник
x <- c(1:9, 7:10, 5:22); y <- c(letters, letters[1:5]); test <- data.frame(x, y); test[duplicated(test$x) | duplicated(test$x, fromLast=TRUE), ]
вернул все три копии 7, 8 и 9. Почему это работает?duplicated(c(1,1,1))
vsduplicated(c(1,1,1,), fromLast = TRUE)
даетc(FALSE,TRUE,TRUE)
иc(TRUE,TRUE,FALSE)
. Среднее значение естьTRUE
в обоих случаях. Взятие|
обоих векторов даетc(TRUE,TRUE,TRUE)
.Вам нужно собрать набор
duplicated
значений, применитьunique
, а затем протестировать с помощью%in%
. Как всегда, пример задачи оживит этот процесс.источник
duplicated
,unique
и%in%
может быть легко обобщается на dataframe , если бы нужно было первым вpaste
каждой строке с необычным символом разделителя. (Принятый ответ лучше.)У меня был такой же вопрос , и если не ошибаюсь, это тоже ответ.
Не знаю, какой из них быстрее, набор данных, который я сейчас использую, недостаточно велик, чтобы проводить тесты, дающие значительные временные промежутки.
источник
vec
как атомарный вектор, так и как фрейм данных. Я подозреваю, что с реальным фреймом данных это не удастся.Дублированные строки в кадре данных можно получить
dplyr
, выполнивЧтобы исключить определенные столбцы
group_by_at(vars(-var1, -var2))
, вместо этого можно использовать группировку данных.Если действительно нужны индексы строк, а не только данные, вы можете сначала добавить их, как показано ниже:
источник
n()
. Не забудьте разгруппировать получившийся фрейм данных.Вот решение @Joshua Ulrich как функция. Этот формат позволяет вам использовать этот код так же, как вы использовали бы duplicated ():
На том же примере:
источник
Если вас интересует, какие строки дублируются для определенных столбцов, вы можете использовать подход plyr :
Добавление счетной переменной с помощью dplyr :
Для повторяющихся строк (учитывая все столбцы):
Преимущество этих подходов в том, что вы можете указать количество дубликатов в качестве отсечения.
источник
У меня была аналогичная проблема, но мне нужно было идентифицировать повторяющиеся строки по значениям в определенных столбцах. Я придумал следующее решение dplyr :
Код группирует строки по определенным столбцам. Если длина группы больше 1, код помечает все строки в группе как дублированные. Как только это будет сделано, вы можете использовать
Duplicated
столбец для фильтрации и т. Д.источник