select
ライブラリのdplyr
関数を使用して、data.frame
の列からすべての一意値を選択することは可能ですか? SQL
表記の「SELECT DISTINCT field1 FROM table1
」のようなもの。
ありがとう!
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 <0.7.
Dplyr関数を括弧で囲み、$
構文と組み合わせます。
(mtcars %>% distinct(cyl))$cyl
dplyr> = 0.7.
pull
動詞を使用します。
mtcars %>% distinct(cyl) %>% pull()
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
を選択し(もちろん、この場合は1列のみです)、名前をunique.x
に変更します。
unique(dat$x)
を使用して、ベースR
で一意の値を直接取得することもできます。
複数の変数があり、データに表示されるすべての一意の組み合わせが必要な場合は、上記のコードを次のように一般化できます。
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)