Игнорирование NA в кадре данных при поиске уникальных строк

У меня есть кадр данных с 20 столбцами и около 200 строк, и я хотел бы найти уникальные строки. Проблема в том, что почти в каждой строке смешано несколько NA: это действительно недостающие данные, и я хотел бы, чтобы NA рассматривались как «подстановочные знаки», а не использовались для сопоставления с другими NA.

Следующие две строки должны быть распознаны как совпадающие (т.е. неуникальные)

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

Я пробовал аргумент uncomparables для уникальной функции, но, похоже, он не реализован. Большое спасибо.


person Patrick Turko    schedule 19.11.2014    source источник
comment
Я обновил код. Не могли бы вы проверить, это ли то, что вы хотели.   -  person akrun    schedule 19.11.2014


Ответы (2)


Поместите это в двойной цикл for:

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

Замените 1 и 2 на i и j, чтобы просмотреть все сравнения, которые вам нужно проверить.

person ARobertson    schedule 19.11.2014

Вы могли бы попробовать

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

данные

 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
Спасибо, но важен порядок значений в строках. - person Patrick Turko; 19.11.2014