Еще немного про векторы

Последовательности

Для создания векторов можно использовать последовательности (для владеющих Python: аналог range() и arange(), но в отличие от Python, здесь в вектор включаются оба конца). Например, последовательность из целых значений от 0 до 10:

0:10 
##  [1]  0  1  2  3  4  5  6  7  8  9 10

Мы можем сохранить результат в вектор my_seq.

my_seq <- 1:10
my_seq
##  [1]  1  2  3  4  5  6  7  8  9 10

А вот последовательность из целых начений от 1 до 10 с шагом 2:

seq(from = 1, to = 10, by = 2)
## [1] 1 3 5 7 9

Названия параметров можем опускать, если сохраняем их порядок:

seq(1, 10, 2) 
## [1] 1 3 5 7 9

Шаг также может быть дробным:

seq(1, 10, 0.5)
##  [1]  1.0  1.5  2.0  2.5  3.0  3.5  4.0  4.5  5.0  5.5  6.0  6.5  7.0  7.5
## [15]  8.0  8.5  9.0  9.5 10.0

Векторы из повторяющихся значений

В R можно быстро составить вектор из повторяющихся значений. Например, три раза повторить “Repeat me”:

rep('Repeat me', 3) 
## [1] "Repeat me" "Repeat me" "Repeat me"

Или три раза повторить вектор с двумя значениями 0 и 1:

rep(c(1, 0), 3)
## [1] 1 0 1 0 1 0
rep(c('Yes','No'), each = 4) # повторить 4 раза каждый элемент вектора
## [1] "Yes" "Yes" "Yes" "Yes" "No"  "No"  "No"  "No"

Поиск уникальных значений и подсчет значений

А как получить вектор без повторяющихся значений? Для этого есть функция unique():

v <- c(1, 1, 0, 2, 2, 3, 5, 1, 8, 2)
unique(v)
## [1] 1 0 2 3 5 8

Как посчитать, сколько раз в векторе встречаются различные значения? Для этого есть функция table():

table(v)
## v
## 0 1 2 3 5 8 
## 1 3 3 1 1 1

Функция table() возвращает абсолютные частоты значений. Чтобы получить относительные частоты, то есть доли, можно посчитать их самостоятельно:

table(v)/sum(table(v))
## v
##   0   1   2   3   5   8 
## 0.1 0.3 0.3 0.1 0.1 0.1

И даже перевести в проценты:

table(v)/sum(table(v)) * 100
## v
##  0  1  2  3  5  8 
## 10 30 30 10 10 10

Пропущенные значения

Можно создавать векторы с пропущенными значениями (NAs, от “not applicable”):

w <- c(0, 1, NA, NA)
w
## [1]  0  1 NA NA

Проверим, являются ли элементы пропущенными значениями:

is.na(w) # проверяем, является ли NA
## [1] FALSE FALSE  TRUE  TRUE
which(is.na(w)) # возвращаем индексы NAs
## [1] 3 4

А так не сработает, будьте бдительны:

which(w == NA)
## integer(0)

Обратите внимание: NA указывается без кавычек! Это не текст, который кодирует пропущенные значения, а особый «тип» данных (наличие NA не изменяет тип переменной, то есть, если NA встречаются в числовой переменной, переменная будет восприниматься R как числовая).