Можно ли выбрать все уникальные значения из столбца data.frame
с помощью функции select
в библиотеке dplyr
?
Что-то вроде "SELECT DISTINCT field1 FROM table1
" в нотации SQL
.
Спасибо!
Можно ли выбрать все уникальные значения из столбца data.frame
с помощью функции select
в библиотеке dplyr
?
Что-то вроде "SELECT DISTINCT field1 FROM table1
" в нотации SQL
.
Спасибо!
В 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
Функция 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)
Чтобы добавить к другим ответам, если вы предпочитаете возвращать вектор, а не фреймворк данных, у вас есть следующие опции:
dplyr < 0.7.0
Включите функции dplyr в круглых скобках и объедините их с синтаксисом $
:
(mtcars %>% distinct(cyl))$cyl
dplyr >= 0.7.0
Используйте pull
глагол:
mtcars %>% distinct(cyl) %>% pull()