Saya memiliki data.frame seperti ini -
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
Saya ingin menghapus duplikat baris berdasarkan dua kolom pertama. Output yang diharapkan -
df[!duplicated(df[,1:2]),]
x y z
1 0 1 1
2 1 0 2
4 1 1 4
Saya secara khusus mencari solusi menggunakan dplyr
paket.
df %>% group_by(x, y) %>% do(head(.,1))
distinct()
Berikut ini adalah solusi menggunakan
dplyr >= 0.5
.sumber
Demi kelengkapan, berikut ini juga berfungsi:
Namun, saya lebih suka menggunakan solusi
distinct
, dan saya curiga ini lebih cepat juga.sumber
Sebagian besar waktu, solusi terbaik adalah menggunakan
distinct()
dari dplyr, seperti yang telah disarankan.Namun, inilah pendekatan lain yang menggunakan
slice()
fungsi dari dplyr.Perbedaan menggunakan
distinct()
fungsiKelebihan dari solusi ini adalah ia membuatnya eksplisit baris mana yang dipertahankan dari kerangka data asli, dan dapat dipasangkan dengan baik dengan
arrange()
fungsinya.Katakanlah Anda memiliki data penjualan pelanggan dan Anda ingin menyimpan satu catatan per pelanggan, dan Anda ingin catatan itu menjadi yang dari pembelian terakhir mereka. Maka Anda bisa menulis:
sumber
Saat memilih kolom dalam R untuk kumpulan data yang diperkecil, Anda sering kali bisa mendapatkan duplikat.
Dua baris ini memberikan hasil yang sama. Setiap menghasilkan set data unik dengan dua kolom yang dipilih saja:
sumber
Jika Anda ingin menemukan baris yang digandakan, Anda dapat menggunakan
find_duplicates
darihablar
:sumber