2列以上のデータフレームdfがあるとします。unique()
または他のR関数を使用して、2列以上の一意の組み合わせのサブセットを作成する簡単な方法はありますか?
sqldf()
を使用して簡単な"SELECT DISTINCT var1, var2, ... varN"
クエリですが、これを行うRの方法を探しています。
ftableを強制的にdataframeに変更してフィールド名を使用することを思いつきましたが、データセットに存在しない組み合わせのクロス集計も取得しています。
uniques <- as.data.frame(ftable(df$var1, df$var2))
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-24 )distinct
必要な追加手順
_df %>% select(var1, var2) %>% distinct
_
(または古い方法distinct(select(df, var1, var2))
)。
@Marekの答えは明らかに正しいですが、古くなっている可能性があります。現在の dplyr バージョン(0.7.4)では、さらに単純なコードが可能です。
単に使用:
df %>% distinct(var1, var2)
すべての列を保持したい場合は、
df %>% distinct(var1, var2, .keep_all = TRUE)
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,]