Saya ingin mengidentifikasi dan menandai baris duplikat berdasarkan 2 kolom. Saya ingin membuat pengidentifikasi unik untuk setiap duplikat jadi saya tahu bukan hanya barisnya adalah duplikat, tetapi baris mana yang merupakan duplikat dengannya. Saya memiliki kerangka data yang terlihat seperti di bawah ini dengan beberapa pasangan item duplikat (saat cocok dan duduk) dan pasangan lain yang tidak digandakan. Sementara pasangan barang digandakan, informasi yang dikandungnya unik (misalnya, satu baris akan memiliki nilai dalam Value1 untuk 1 baris, tetapi bukan Value2 dan Nilai 3, baris kedua atau 'duplikat' akan memiliki angka untuk Value2 dan Value3 saja bukan Value1)
kerangka data saat ini
value1 value2 value3 fit sit
[1,] "1" NA NA "it1" "it2"
[2,] NA "3" "2" "it2" "it1"
[3,] "2" "3" "4" "it3" "it4"
[4,] NA NA NA "it4" "it3"
[5,] "5" NA NA "it5" "it6"
[6,] NA NA "2" "it6" "it5"
[7,] NA "4" NA "it7" "it9"
kode untuk menghasilkan contoh dataframe
value1<-c(1,NA,2,NA,5,NA,NA)
value2<-c(NA,3,3,NA,NA,NA, 4)
value3<-c(NA,2,4,NA,NA,2, NA)
fit<-c("it1","it2","it3","it4", "it5", "it6","it7")
sit<-c("it2","it1","it4","it3", "it6", "it5", "it9")
df.now<-cbind(value1,value2,value3, fit, sit)
yang saya inginkan adalah mengonversinya menjadi kerangka data yang terlihat seperti ini:
bingkai data yang diinginkan
val1 val2 val3 it1 it2
[1,] "1" "3" "2" "it1" "it2"
[2,] "2" "3" "4" "it3" "it4"
[3,] "5" NA "2" "it5" "it6"
[4,] NA "4" NA "it7" "it9"
Saya berpikir untuk melakukan langkah-langkah berikut: 1. membuat variabel baru menggunakan fit dan duduk dengan item terendah dan item tertinggi untuk mengidentifikasi pasangan duplikat 2. mengidentifikasi pasangan item duplikat 3. menggunakan ifelse untuk memilih dan mengisi informasi unik.
Saya tahu bagaimana melakukan langkah 1 dan 3, tetapi saya terjebak pada langkah 2. Saya pikir apa yang perlu saya lakukan tidak hanya mengidentifikasi duplikat BENAR / SALAH, tetapi mungkin memiliki kolom dengan pengidentifikasi unik untuk setiap pasangan item seperti ini (ada 2 baris tambahan karena langkah saya 1):
value1 value2 value3 fit sit lit hit dup
[1,] "1" NA NA "it1" "it2" "it1" "it2" 1
[2,] NA "3" "2" "it2" "it1" "it1" "it2" 1
[3,] "2" "3" "4" "it3" "it4" "it3" "it4" 2
[4,] NA NA NA "it4" "it3" "it3" "it4" 2
[5,] "5" NA NA "it5" "it6" "it5" "it6" 3
[6,] NA NA "2" "it6" "it5" "it5" "it6" 3
[7,] NA "4" NA "it7" "it9" "it7" "it9" NA
Saya tidak yakin bagaimana melakukan ini.
Apa yang saya minta adalah bantuan dengan langkah 2 atau mungkin ada cara yang lebih baik untuk menyelesaikannya daripada langkah-langkah yang saya uraikan.
Gunakan
!duplicated()
setelahsort
ing.sumber
Menggunakan
melt/dcast
daridata.table
data
sumber
data.table
Opsi lain :keluaran:
sumber
Inilah upaya saya menggunakan data.table. Data Anda dipanggil
mydf
. Pertama, saya mengurutkanfit
dansit
untuk setiap baris dan membuat variabel barugroup
,. Kemudian, untuk setiap grup, saya mengurutkan nilai dalam tiga kolom nilai (yaitu, value1, value2, dan value3). Akhirnya, saya mengekstrak baris pertama untuk setiap grup.DATA
sumber
Ini juga dapat dilakukan menggunakan
tidyr
'spivot_longer
denganvalues_drop_na = TRUE
dikombinasikan denganpivot_wider
:Data
sumber