R эквивалент SELECT DISTINCT для двух или более полей / переменных - PullRequest
23 голосов
/ 25 мая 2010

Скажем, у меня есть датафрейм df с двумя или более столбцами, есть ли простой способ использовать unique() или другую функцию R для создания подмножества уникальных комбинаций из двух или более столбцов?

Я знаю, что могу использовать sqldf() и написать простой "SELECT DISTINCT var1, var2, ... varN" запрос, но я ищу способ R сделать это.

Мне пришло в голову попробовать ftable , приведенный к dataframe , и использовать имена полей, но я также получаю перекрестные таблицы комбинаций, которых нет в наборе данных:

uniques <- as.data.frame(ftable(df$var1, df$var2))

Ответы [ 3 ]

39 голосов
/ 25 мая 2010

unique работает на data.frame, поэтому unique(df[c("var1","var2")]) должно быть тем, что вы хотите.

Другой вариант distinct из dplyr пакет :

df %>% distinct(var1, var2) # or distinct(df, var1, var2)

Примечание:

Для более старых версий dplyr ( <0.5.0, 2016-06-24 </a>) distinct требуется дополнительный шаг

df %>% select(var1, var2) %>% distinct

(или по-старому distinct(select(df, var1, var2))).

2 голосов
/ 01 марта 2018

@ Ответ Марека, очевидно, правильный, но может быть устаревшим. Текущая версия (0.7.4) позволяет использовать еще более простой код:

Просто используйте:

df %>% distinct(var1, var2)

Если вы хотите сохранить все столбцы, добавьте

df %>% distinct(var1, var2, .keep_all = TRUE)
0 голосов
/ 20 июля 2017

Чтобы сохранить все остальные переменные в df, используйте это:

unique_rows <- !duplicated(df[c("var1","var2")])

unique.df <- df[unique_rows,]

Еще один менее рекомендуемый метод - это использовать row.names () # (см. Комментарий Дэвида ниже):

unique_rows <- row.names(unique(df[c("var1","var2")]))

unique.df <- df[unique_rows,]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...