Categories

A sample text widget

Etiam pulvinar consectetur dolor sed malesuada. Ut convallis euismod dolor nec pretium. Nunc ut tristique massa.

Nam sodales mi vitae dolor ullamcorper et vulputate enim accumsan. Morbi orci magna, tincidunt vitae molestie nec, molestie at mi. Nulla nulla lorem, suscipit in posuere in, interdum non magna.

Выборка частей массивов data.frame с помощью [квадратных скобок] в R

Функция [ (квадратная скобка) в R служит для отбора отдельных элементов или наборов элементов из векторов, списков (list), матриц и массивов (data.frame). Разберём, как это делать в data.frame.

Возьмём для примера массив “amis” из пакета “boot”.

library(boot)
data(amis)

В массиве содержатся результаты эксперимента по оценке влияния предупредительных дорожных знаков на скорость автомобилей. Массив состоит из четырёх колонок. speed – скорость автомобиля, period – время замера скорости: до установки знака / сразу после установки / через время после установки, warning – тип участка, на котором проводился замер: тестовый или контрольный, pair – порядковый номер пары участков, на которой проведён замер. В массиве 8437 строк, т.е. замеров скоростей.

head(amis)
##   speed period warning pair
## 1    26      1       1    1
## 2    26      1       1    1
## 3    26      1       1    1
## 4    26      1       1    1
## 5    27      1       1    1
## 6    28      1       1    1

Отбор по условию

Отберём те строки, которые относятся к контрольной группе (warning==2).

x <- amis[amis$warning == 2, ]
head(x)
##     speed period warning pair
## 201    21      1       2    1
## 202    25      1       2    1
## 203    25      1       2    1
## 204    26      1       2    1
## 205    26      1       2    1
## 206    26      1       2    1

В данном случае мы применили функцию квадратной скобки к массиву amis. Выражение, указанное между открывающей квадратной скобкой и запятой, задаёт требования для отбора строк: такие строки, в которых переменная warning равна двум. Между запятой и закрывающей квадратной скобкой указывается, какие колонки мы хотим отобрать. Пустота в нашем случае – это указание на отбор всех колонок.

Добавим к предыдущему примеру отбор только колонки со скоростью.

x <- amis[amis$warning == 2, &quot;speed&quot;]
head(x)
## [1] 21 25 25 26 26 26

Наш двухмерный массив превратился в одномерный вектор. В фукнцию “[” заложена такая логика, что если после отбора измерение становится лишним, то оно удаляется. Иногда это полезно, иногда нет. Чтобы оставить два измерения, необходимо добавить аргумент drop=FALSE.

x <- amis[amis$warning == 2, &quot;speed&quot;, drop = FALSE]
head(x)
##     speed
## 201    21
## 202    25
## 203    25
## 204    26
## 205    26
## 206    26

Отбор по номерам строк и колонок

Снова отберём колонку со скоростью, но указываем колонку не по имени, а по её порядковому номеру (она в массиве первая).

x <- amis[amis$warning == 2, 1, drop = FALSE]
head(x)
##     speed
## 201    21
## 202    25
## 203    25
## 204    26
## 205    26
## 206    26

Номера можно указывать и при отборе строк. Отберём строки 7, 9, 16 и 18 из колонок №1, 2.

x <- amis[c(7, 9, 16, 18), 1:2]
head(x)
##    speed period
## 7     28      1
## 9     28      1
## 16    29      1
## 18    30      1

Объединение условий для отбора

Критерии для отбора можно комбинировать через операторы. Отберём строки из тестовой группы (warnning=1) и из временного периода до установки знака (period=1). Объединение происходит через логический оператор & (логическое И).

x <- amis[amis$warning == 1 &amp; amis$period == 1, ]
head(x)
##   speed period warning pair
## 1    26      1       1    1
## 2    26      1       1    1
## 3    26      1       1    1
## 4    26      1       1    1
## 5    27      1       1    1
## 6    28      1       1    1

Отберём наблюдения из контрольной группы (warning=2), относящиеся к временным периодам сразу после установки знака (period=2) и через время после установки знака (period-3). Возможно несколько вариантов.

x <- amis[amis$warning == 2 &amp; (amis$period == 2 | amis$period == 3), ]
x1 <- amis[amis$warning == 2 &amp; amis$period &gt; 1, ]
x2 <- amis[amis$warning == 2 &amp; amis$period %in% 2:3, ]

В x мы использовали оператор “логическое ИЛИ” и скобки, чтобы установить нужный нам порядок вычисления условий.

В x2 мы использовали функцию %in%, которая проверяет, равен ли первый аргумент (amis$period) какому-либо из значений второго арумента (2 или 3).

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>