web-dev-qa-db-ja.com

2つ以上のフィールド/変数でのSELECT DISTINCTに相当するR

2列以上のデータフレームdfがあるとします。unique()または他のR関数を使用して、2列以上の一意の組み合わせのサブセットを作成する簡単な方法はありますか?

sqldf()を使用して簡単な"SELECT DISTINCT var1, var2, ... varN"クエリですが、これを行うRの方法を探しています。

ftableを強制的にdataframeに変更してフィールド名を使用することを思いつきましたが、データセットに存在しない組み合わせのクロス集計も取得しています。

uniques <- as.data.frame(ftable(df$var1, df$var2))
26
wahalulu

uniqueは_data.frame_で機能するので、unique(df[c("var1","var2")])が適切です。

別のオプションは distinctパッケージdplyrです:

_df %>% distinct(var1, var2) # or distinct(df, var1, var2)
_

注:

古いバージョンのdplyrの場合( <0.5.0、2016-06-24distinct必要な追加手順

_df %>% select(var1, var2) %>% distinct
_

(または古い方法distinct(select(df, var1, var2)))。

40
Marek

@Marekの答えは明らかに正しいですが、古くなっている可能性があります。現在の dplyr バージョン(0.7.4)では、さらに単純なコードが可能です。

単に使用:

df %>% distinct(var1, var2)

すべての列を保持したい場合は、

df %>% distinct(var1, var2, .keep_all = TRUE)
3
Tjebo

Df内の他のすべての変数を保持するには、これを使用します。

unique_rows <- !duplicated(df[c("var1","var2")])

unique.df <- df[unique_rows,]

あまり推奨されないもう1つの方法は、row.names()#を使用することです(以下のDavidのコメントを参照)。

unique_rows <- row.names(unique(df[c("var1","var2")]))

unique.df <- df[unique_rows,]
0
sbaniwal