R эквивалент SELECT DISTINCT для двух или более полей/переменных
Скажем, у меня есть dataframe df с двумя или более столбцами, есть ли простой способ использовать уникальную() или другую функцию R для создания подмножества уникальных комбинаций из двух или более столбцов?
Я знаю, что могу использовать sqldf() и писать простой запрос SELECT DISTINCT var1, var2,... varN, но я ищу способ R для этого.
Мне пришло в голову попытаться использовать ftable, привязанный к фрейму данных, и использовать имена полей, но я также получаю перекрестные таблицы комбинаций, которые не существуют в наборе данных:
uniques <- as.data.frame(ftable(df$var1, df$var2))
Ответы
Ответ 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,]