Подтвердить что ты не робот

R эквивалент SELECT DISTINCT для двух или более полей/переменных

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

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

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

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

Ответ 1

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

Другим вариантом является distinct из dplyr package:

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

(или старинный способ distinct(select(df, var1, var2))).

Ответ 2

Чтобы использовать все другие переменные в 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,]