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

Выберите уникальные значения с помощью функции "выбрать" в библиотеке "dplyr"

Можно ли выбрать все уникальные значения из столбца data.frame с помощью функции select в библиотеке dplyr? Что-то вроде "SELECT DISTINCT field1 FROM table1" в нотации SQL.

Спасибо!

4b9b3361

Ответ 1

В dplyr 0.3 это можно легко достичь с помощью метода distinct().

Вот пример:

distinct_df = df %>% distinct(field1)

Вы можете получить вектор различных значений с помощью:

distinct_vector = distinct_df$field1

Вы также можете выбрать поднабор столбцов одновременно с вызовом distinct(), который может быть более чистым, если вы посмотрите на фрейм данных с помощью head/tail/glimpse.:

distinct_df = df %>% distinct(field1) %>% select(field1) distinct_vector = distinct_df$field1

Ответ 2

Функция dplyr select выбирает определенные столбцы из фрейма данных. Чтобы возвращать уникальные значения в конкретном столбце данных, вы можете использовать функцию group_by. Например:

library(dplyr)

# Fake data
set.seed(5)
dat = data.frame(x=sample(1:10,100, replace=TRUE))

# Return the distinct values of x
dat %>%
  group_by(x) %>%
  summarise() 

    x
1   1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9
10 10

Если вы хотите изменить имя столбца, вы можете добавить следующее:

dat %>%
  group_by(x) %>%
  summarise() %>%
  select(unique.x=x)

Это оба выбирают столбец x среди всех столбцов в кадре данных, который возвращает dplyr (и, конечно, только один столбец в этом случае) и меняет свое имя на unique.x.

Вы также можете получить уникальные значения непосредственно в базе R с помощью unique(dat$x).

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

set.seed(5)
dat = data.frame(x=sample(1:10,100, replace=TRUE), 
                 y=sample(letters[1:5], 100, replace=TRUE))

dat %>% 
  group_by(x,y) %>%
  summarise() %>%
  select(unique.x=x, unique.y=y)

Ответ 3

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

dplyr < 0.7.0

Включите функции dplyr в круглых скобках и объедините их с синтаксисом $:

(mtcars %>% distinct(cyl))$cyl

dplyr >= 0.7.0

Используйте pull глагол:

mtcars %>% distinct(cyl) %>% pull()