Как удалить дублированные строки по столбцу в матрице R - PullRequest
20 голосов
/ 26 июля 2011

Я пытаюсь удалить дублирующиеся строки на один столбец (например, 1-й столбец) в матрице R. Как извлечь уникальный набор из одного столбца из матрицы? Я использовал

x_1 <- x[unique(x[,1]),]

Хотя размер правильный, все значения NA. Поэтому вместо этого я попытался

x_1 <- x[-duplicated(x[,1]),]

Но размеры были неверными.

Ответы [ 2 ]

27 голосов
/ 27 июля 2011

Я думаю, вы не понимаете, как работает подмножество в R. unique(x[,1]) вернет набор уникальных значений в первом столбце. Если вы затем попытаетесь подмножество , используя эти значения, R подумает, что вы ссылаетесь на строк матрицы. Таким образом, вы, вероятно, получаете NA, потому что значения относятся к строкам, которых нет в матрице.

Ваша вторая попытка идет вразрез с фактом, что duplicated возвращает логический вектор , а не вектор индексов. Таким образом, размещение знака минус перед ним преобразует его в вектор из 0 и -1, который снова R интерпретирует как попытку обратиться к строкам.

Попробуйте заменить '-' на '!' перед duplicated, который является оператором логического отрицания. Примерно так:

m <- matrix(runif(100),10,10)
m[c(2,5,9),1] <- 1
m[!duplicated(m[,1]),]
13 голосов
/ 27 июля 2011

Поскольку вам нужны индексы уникальных строк, используйте duplicated, как вы пытались. Проблема заключалась в использовании - вместо !, поэтому попробуйте:

x[!duplicated(x[,1]),]
...