Mengabaikan NA dalam kerangka data saat menemukan baris unik

Saya memiliki kerangka data dengan 20 kolom dan sekitar 200 baris, dan saya ingin mencari baris unik. Masalahnya adalah hampir setiap baris memiliki beberapa NA yang tercampur: ini benar-benar data yang hilang dan saya ingin NA diperlakukan seperti "wildcard", tidak digunakan untuk mencocokkan NA lainnya.

Dua baris berikut harus dikenali sebagai kecocokan (yaitu tidak unik)

T, S, NA, Z
NA, S, G, Z

Saya sudah mencoba argumen incomparables ke fungsi unik, tetapi sepertinya tidak diterapkan. Terima kasih banyak.


person Patrick Turko    schedule 19.11.2014    source sumber
comment
Saya memperbarui kodenya. Bisakah Anda memeriksa apakah ini yang Anda inginkan.   -  person akrun    schedule 19.11.2014


Jawaban (2)


Masukkan ini ke dalam loop for ganda:

all(na.omit(x[1,] == x[2,]))

Mengganti 1 dan 2 dengan i dan j untuk menelusuri semua perbandingan yang perlu Anda periksa.

person ARobertson    schedule 19.11.2014

Kamu bisa mencoba

val <-  apply(df, 1, function(x) {paste(na.omit(x), collapse='')})
df[!duplicated(val),]
#    V1 V2   V3 V4
#1    T  S <NA>  Z
#2 <NA>  S    G  Z
#3    S  G    Z  T

data

 df <- structure(list(V1 = c("T", NA, "S", "S", "S"), V2 = c("S", "S", 
 "G", NA, "G"), V3 = c(NA, "G", "Z", "Z", NA), V4 = c("Z", "Z", 
 "T", "G", "Z")), .Names = c("V1", "V2", "V3", "V4"), row.names = c(NA, 
 -5L), class = "data.frame")
person akrun    schedule 19.11.2014
comment
Terima kasih, tetapi urutan nilai dalam baris itu penting. - person Patrick Turko; 19.11.2014