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

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

В 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

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

Можно создавать векторы с пропущенными значениями (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

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

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

Для создания векторов можно использовать последовательности (для владеющих 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 
my_seq
##  [1]  1  2  3  4  5  6  7  8  9 10

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

seq(from = 1, to = 3, by = 0.5)
## [1] 1.0 1.5 2.0 2.5 3.0

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

seq(1, 3, 0.5) 
## [1] 1.0 1.5 2.0 2.5 3.0