Как получить "кто отличается" в векторе, с R - PullRequest
4 голосов
/ 17 февраля 2012

Простой вопрос.Рассмотрим этот вектор:

[1] 378 380 380 380 380 360 187 380

Как мы можем определить, какие числа отличаются от других в этом списке?В таком случае это будет 378 360 и 187. Есть идеи?Я знаю, что решение может быть не простым ...

Я изучаю R и работаю над набором данных для своего исследования, так что это! = Домашняя работа.

Любая помощьс благодарностью!

Ответы [ 4 ]

4 голосов
/ 17 февраля 2012

Может быть, другая альтернатива:

x <- c(378, 380, 380, 380, 380, 360, 187, 380)
setdiff(unique(x), x[duplicated(x)])
3 голосов
/ 17 февраля 2012

Другой подход:

x <- c(378, 380, 380, 380, 380, 360, 187, 380)
y <- rle(sort(x)); y[[2]][y[[1]]==1]
3 голосов
/ 17 февраля 2012

Извлечение неповторенных элементов можно выполнить с помощью чего-то вроде:

a<-c(378, 380, 380, 380, 380, 360, 187, 380)
b <- table(a)
names(b[b==1])
#[1] "187" "360" "378"
2 голосов
/ 17 февраля 2012

Вы можете найти наиболее частую запись, используя table() и which.max(), затем вы можете индексировать исходный вектор с помощью логического вектора, содержащего неравные записи, например: data [data! = Mostfrequent]. Вы можете получить помощь по ?table() и ?which.max(), пожалуйста, прокомментируйте, если вам нужно больше.

Ваш образец вектора

x <- c(378, 380, 380, 380, 380, 360, 187, 380)

Найдите частоту каждого числа в нем с помощью table. Для удобства позже мы преобразуем его в фрейм данных.

counts <- as.data.frame(table(x), stringsAsFactors = FALSE)

which.max позволяет нам найти модальное значение (наиболее распространенное).

modal_value <- which.max(counts$Freq)

Другие значения затем можно найти с помощью индексации.

as.numeric(counts[-modal_value, "x"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...