Rの重複行データフレームの削除[終了]


71

このサンプルデータフレームから重複行を削除するにはどうすればよいですか?

A   1
A   1
A   2
B   4  
B   1
B   1
C   2
C   2

両方の列に基づいて重複を削除したい:

A   1
A   2
B   4
B   1
C   2

順序は重要ではありません。


@whuberをSOに移動してはいけませんか?
llrs

@Llopisはい、しかし、今それを行うには遅すぎます。そして、最初に閉じたときは遅すぎました。この種の問題は、何年も前にトピック(境界線)で検討されていましたが、今日では、すぐに移行されます。
whuber

回答:


115

unique()確かにあなたの質問に答えますが、同じ目的を達成するための別の関連する興味深い機能はduplicated()です。

どの行が複製されているかを調べることができます。

a <- c(rep("A", 3), rep("B", 3), rep("C",2))
b <- c(1,1,2,4,1,1,2,2)
df <-data.frame(a,b)

duplicated(df)
[1] FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE

> df[duplicated(df), ]
  a b
2 A 1
6 B 1
8 C 2

> df[!duplicated(df), ]
  a b
1 A 1
3 A 2
4 B 4
5 B 1
7 C 2

2
「重複」機能に言及していただきありがとうございます。列のサブセットに基づいて重複行を削除するために使用できます。
ジョコ

51

あなたが探していunique()ます。

a <- c(rep("A", 3), rep("B", 3), rep("C",2))
b <- c(1,1,2,4,1,1,2,2)
df <-data.frame(a,b)
unique(df)

> unique(df)
  a b
1 A 1
3 A 2
4 B 4
5 B 1
7 C 2

1
ありがとう、ベルント。uniqueは特定の列にのみ適用できると思いました。データフレーム全体にも使用できることを知りませんでした。おかげで再び
ヤナ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.