R duplicated
mengembalikan vektor yang menunjukkan apakah setiap elemen dari vektor atau bingkai data adalah duplikat elemen dengan subskrip yang lebih kecil. Jadi jika baris 3, 4, dan 5 dari data frame 5 baris adalah sama, duplicated
saya akan memberikan vektornya
FALSE, FALSE, FALSE, TRUE, TRUE
Tetapi dalam hal ini saya sebenarnya ingin mendapatkan
FALSE, FALSE, TRUE, TRUE, TRUE
yaitu, saya ingin tahu apakah sebuah baris diduplikasi oleh baris dengan subskrip yang lebih besar juga.
sumber
x <- c(1:9, 7:10, 5:22); y <- c(letters, letters[1:5]); test <- data.frame(x, y); test[duplicated(test$x) | duplicated(test$x, fromLast=TRUE), ]
Mengembalikan ketiganya salinan 7, 8, dan 9. Mengapa itu berhasil?duplicated(c(1,1,1))
vsduplicated(c(1,1,1,), fromLast = TRUE)
memberic(FALSE,TRUE,TRUE)
danc(TRUE,TRUE,FALSE)
. Nilai tengahTRUE
dalam kedua kasus. Pengambilan|
kedua vektor memberic(TRUE,TRUE,TRUE)
.Anda perlu mengumpulkan kumpulan
duplicated
nilai, menerapkanunique
, dan kemudian mengujinya dengan%in%
. Seperti biasa, masalah sampel akan membuat proses ini menjadi hidup.sumber
duplicated
,unique
dan%in%
dapat dengan mudah digeneralisasikan ke kerangka data jika seseorang pertama kalipaste
setiap baris dengan karakter pemisah yang tidak biasa. (Jawaban yang diterima lebih baik.)Saya memiliki pertanyaan yang sama , dan jika saya tidak salah, ini juga sebuah jawaban.
Entah mana yang lebih cepat, meskipun, kumpulan data yang saya gunakan saat ini tidak cukup besar untuk melakukan pengujian yang menghasilkan kesenjangan waktu yang signifikan.
sumber
vec
keduanya sebagai vektor atom dan sebagai kerangka data. Saya menduga bahwa dengan datframe yang sebenarnya itu akan gagal.Baris duplikat dalam kerangka data dapat diperoleh dengan
dplyr
melakukanUntuk mengecualikan kolom tertentu
group_by_at(vars(-var1, -var2))
dapat digunakan untuk mengelompokkan data.Jika indeks baris dan bukan hanya data yang benar-benar dibutuhkan, Anda dapat menambahkannya terlebih dahulu seperti pada:
sumber
n()
. Jangan lupa untuk memisahkan dataframe yang dihasilkan.Berikut adalah solusi @Joshua Ulrich sebagai fungsi. Format ini memungkinkan Anda untuk menggunakan kode ini dengan cara yang sama seperti Anda menggunakan duplikat ():
Menggunakan contoh yang sama:
sumber
Jika Anda tertarik pada baris mana yang diduplikasi untuk kolom tertentu, Anda dapat menggunakan pendekatan plyr :
Menambahkan variabel hitungan dengan dplyr :
Untuk baris duplikat (mempertimbangkan semua kolom):
Manfaat dari pendekatan ini adalah Anda dapat menentukan berapa banyak duplikat sebagai batas.
sumber
Saya memiliki masalah serupa tetapi saya perlu mengidentifikasi baris yang digandakan berdasarkan nilai di kolom tertentu. Saya datang dengan solusi dplyr berikut :
Kode mengelompokkan baris menurut kolom tertentu. Jika panjang grup lebih dari 1 kode menandai semua baris dalam grup sebagai duplikat. Setelah selesai, Anda dapat menggunakan
Duplicated
kolom untuk memfilter, dll.sumber