Шукати в цьому блозі

Корисні хитрощі при роботі в R

На цій сторінці я поступово буду дописувати рішення всіляких проблем, які можуть постати перед користувачами R і на вирішення яких іноді витрачаються значні часові ресурси.

Вибір повторюваних і неповторюваних значень

Іноді при обробці даних треба вибрати унікальні значення. Для операцій з пошуку унікальних/неунікальних значень використовуються команди unique та duplicated:
 
>x1<- c(1,1,1,1,1,1,1,1,1,2,3,4,5,6,7,8,9,0)#створюємо числовий вектор із унікальними та неунікальними значеннями
> unique(x1)#вибираємо унікальні значення
[1] 1 2 3 4 5 6 7 8 9 0
> duplicated(x1)#вибираємо неунікальні (дубльовані) значення
[1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE


Зверніть увагу на декілька особливостей роботи цих функцій. По-перше - обидві функції повертають нам в тому числі і значення "1", яке декілька разів повторюється. По-друге - функція duplicated повертає не числову, а логічну форму. На першій позиції (де повинна бути "1") - стоїть значення FALSE. Це означає, що для функції duplicated перший випадок "1" ще не є дублюванням. За дублювання вона вважає всі наступні випадки.
Щоб відобразити власне значення, які дублюються, а не логічний вектор - треба застосувати логічне фільтрування до нашого первинного вектора x1:
 
> x1[duplicated(x1)]#виконуємо фільтрування із первинного вектора
[1] 1 1 1 1 1 1 1 1


Якщо Вам треба вибрати значення, які взагалі не повторюються - можна використати поєднання функцій unique та duplicated та вибірку із результату: 

> x1 %in% unique(x1[duplicated(x1)])#шукаємо повністю унікальні значення
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> x1_uniq<- x1[!(x1 %in% unique(x1[duplicated(x1)]))]#виконуємо логічне фільтрування і перенесення даних

> x1_uniq#дивимось результат
[1] 2 3 4 5 6 7 8 9 0


Як видно з результату - значення "1" в кіцеву вибірку не потрапило. Таким чином - ми вибрали повністю унікальні (неповторювані) значення.

Немає коментарів:

Дописати коментар