1. ホーム
  2. r

[解決済み] dplyrを使用して重複した行を削除する

2022-04-24 10:19:49

質問

私はこのようなdata.frameを持っている - 。

set.seed(123)
df = data.frame(x=sample(0:1,10,replace=T),y=sample(0:1,10,replace=T),z=1:10)
> df
   x y  z
1  0 1  1
2  1 0  2
3  0 1  3
4  1 1  4
5  1 0  5
6  0 1  6
7  1 0  7
8  1 0  8
9  1 0  9
10 0 1 10

最初の2列をもとに、重複する行を削除したいと思います。期待される出力

df[!duplicated(df[,1:2]),]
  x y z
1 0 1 1
2 1 0 2
4 1 1 4

を使った解決策を具体的に探しています。 dplyr パッケージを使用します。

解決方法は?

備考 : dplyr が含まれるようになりました。 distinct という関数があります。

以下、オリジナルの回答。


library(dplyr)
set.seed(123)
df <- data.frame(
  x = sample(0:1, 10, replace = T),
  y = sample(0:1, 10, replace = T),
  z = 1:10
)

グループ化して、最初の行だけを残すというのも一つの方法です。

df %>% group_by(x, y) %>% filter(row_number(z) == 1)

## Source: local data frame [3 x 3]
## Groups: x, y
## 
##   x y z
## 1 0 1 1
## 2 1 0 2
## 3 1 1 4

(dplyr 0.2 では、ダミーの z という変数が追加され、単に と書くことができます。 row_number() == 1 )

を追加することも考えています。 slice() という関数があります。 のように動作します。

df %>% group_by(x, y) %>% slice(from = 1, to = 1)

のバリエーションとか。 unique() を選択することができます。 を使用します。

df %>% unique(x, y)