R Language
Создание векторов
Поиск…
Последовательность чисел
Используйте оператор :
для создания последовательностей чисел, например, для использования в векторизации больших фрагментов кода:
x <- 1:5
x
## [1] 1 2 3 4 5
Это работает в обоих направлениях
10:4
# [1] 10 9 8 7 6 5 4
и даже с числами с плавающей запятой
1.25:5
# [1] 1.25 2.25 3.25 4.25
или негативы
-4:4
#[1] -4 -3 -2 -1 0 1 2 3 4
сл ()
seq
является более гибкой функцией, чем оператор :
позволяющий указать шаги, отличные от 1.
Функция создает последовательность с start
(по умолчанию 1) до конца, включая это число.
Вы можете указать только параметр end ( to
)
seq(5)
# [1] 1 2 3 4 5
Как и начало
seq(2, 5) # or seq(from=2, to=5)
# [1] 2 3 4 5
И, наконец, шаг ( by
)
seq(2, 5, 0.5) # or seq(from=2, to=5, by=0.5)
# [1] 2.0 2.5 3.0 3.5 4.0 4.5 5.0
seq
может дополнительно вывести (равномерно разнесенные) шаги, когда в качестве альтернативы поставляется желаемая длина выхода ( length.out
)
seq(2,5, length.out = 10)
# [1] 2.0 2.3 2.6 2.9 3.2 3.5 3.8 4.1 4.4 4.7 5.0
Если последовательность должна иметь ту же длину, что и другой вектор, мы можем использовать along.with
сокращением для length.out = length(x)
x = 1:8
seq(2,5,along.with = x)
# [1] 2.000000 2.428571 2.857143 3.285714 3.714286 4.142857 4.571429 5.000000
В семействе seq
есть две полезные упрощенные функции: seq_along
, seq_len
и seq.int
. seq_along
и seq_len
строят естественные ( seq_len
) числа от 1 до N, где N определяется аргументом функции, длиной вектора или списка с seq_along
и целочисленным аргументом с seq_len
.
seq_along(x)
# [1] 1 2 3 4 5 6 7 8
Обратите внимание: seq_along
возвращает индексы существующего объекта.
# counting numbers 1 through 10
seq_len(10)
[1] 1 2 3 4 5 6 7 8 9 10
# indices of existing vector (or list) with seq_along
letters[1:10]
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
seq_along(letters[1:10])
[1] 1 2 3 4 5 6 7 8 9 10
seq.int
является тем же самым, что и seq
поддерживаемым для древней совместимости.
Существует также старая функциональная sequence
которая создает вектор последовательностей из не отрицательного аргумента.
sequence(4)
# [1] 1 2 3 4
sequence(c(3, 2))
# [1] 1 2 3 1 2
sequence(c(3, 2, 5))
# [1] 1 2 3 1 2 1 2 3 4 5
векторы
Векторы в R могут иметь разные типы (например, целочисленные, логические, символьные). Наиболее общий способ определения вектора - использовать функцию vector()
.
vector('integer',2) # creates a vector of integers of size 2.
vector('character',2) # creates a vector of characters of size 2.
vector('logical',2) # creates a vector of logicals of size 2.
Однако в R, сокращенные функции, как правило, более популярны.
integer(2) # is the same as vector('integer',2) and creates an integer vector with two elements
character(2) # is the same as vector('integer',2) and creates an character vector with two elements
logical(2) # is the same as vector('logical',2) and creates an logical vector with two elements
Также возможно создание векторов со значениями, отличными от значений по умолчанию. Часто для этого используется функция c()
. C не подходит для объединения или конкатенации.
c(1, 2) # creates a integer vector of two elements: 1 and 2.
c('a', 'b') # creates a character vector of two elements: a and b.
c(T,F) # creates a logical vector of two elements: TRUE and FALSE.
Важно отметить, что R интерпретирует любое целое число (например, 1) как целочисленный вектор размера один. То же самое справедливо для чисел (например, 1.1), логических элементов (например, T или F) или символов (например, «a»). Таким образом, вы по существу объединяете векторы, которые, в свою очередь, являются векторами.
Обратите внимание, что вам всегда нужно комбинировать похожие векторы. В противном случае R попытается преобразовать векторы в векторы того же типа.
c(1,1.1,'a',T) # all types (integer, numeric, character and logical) are converted to the 'lowest' type which is character.
Поиск элементов в векторах может выполняться с помощью оператора [
.
vec_int <- c(1,2,3)
vec_char <- c('a','b','c')
vec_int[2] # accessing the second element will return 2
vec_char[2] # accessing the second element will return 'b'
Это также можно использовать для изменения значений
vec_int[2] <- 5 # change the second value from 2 to 5
vec_int # returns [1] 1 5 3
Наконец, оператор :
(short для функции seq()
) можно использовать для быстрого создания вектора чисел.
vec_int <- 1:10
vec_int # returns [1] 1 2 3 4 5 6 7 8 9 10
Это также можно использовать для подмножества векторов (от простых до более сложных подмножеств)
vec_char <- c('a','b','c','d','e')
vec_char[2:4] # returns [1] "b" "c" "d"
vec_char[c(1,3,5)] # returns [1] "a" "c" "e"
Создание названных векторов
Именованный вектор может быть создан несколькими способами. С c
:
xc <- c('a' = 5, 'b' = 6, 'c' = 7, 'd' = 8)
что приводит к:
> xc
a b c d
5 6 7 8
со list
:
xl <- list('a' = 5, 'b' = 6, 'c' = 7, 'd' = 8)
что приводит к:
> xl
$a
[1] 5
$b
[1] 6
$c
[1] 7
$d
[1] 8
С setNames
функции setNames
два вектора одинаковой длины могут использоваться для создания именованного вектора:
x <- 5:8
y <- letters[1:4]
xy <- setNames(x, y)
который приводит к названному целочисленному вектору:
> xy
a b c d
5 6 7 8
Как видно, это дает тот же результат, что и метод c
.
Вы также можете использовать функцию names
чтобы получить тот же результат:
xy <- 5:8
names(xy) <- letters[1:4]
С таким вектором также возможно выбрать элементы по имени:
> xy["c"]
c
7
Эта функция позволяет использовать такой именованный вектор как вектор поиска / таблицу для соответствия значениям значениям другого вектора или столбца в фрейме данных. Учитывая следующий фрейм данных:
mydf <- data.frame(let = c('c','a','b','d'))
> mydf
let
1 c
2 a
3 b
4 d
Предположим, вы хотите создать новую переменную в mydf
называемом num
с правильными значениями из xy
в строках. Использование match
функции соответствующие значения из xy
могут быть выбраны:
mydf$num <- xy[match(mydf$let, names(xy))]
что приводит к:
> mydf
let num
1 c 7
2 a 5
3 b 6
4 d 8
Развертывание вектора с функцией rep ()
Функция rep
может использоваться для повторения вектора достаточно гибким образом.
# repeat counting numbers, 1 through 5 twice
rep(1:5, 2)
[1] 1 2 3 4 5 1 2 3 4 5
# repeat vector with incomplete recycling
rep(1:5, 2, length.out=7)
[1] 1 2 3 4 5 1 2
Каждый аргумент особенно полезен для расширения вектора статистики наблюдательных / экспериментальных единиц в вектор данных с повторными наблюдениями этих единиц.
# same except repeat each integer next to each other
rep(1:5, each=2)
[1] 1 1 2 2 3 3 4 4 5 5
Хорошей особенностью rep
относительно расширения этой структуры данных является то, что расширение вектора на несбалансированную панель может быть выполнено путем замены аргумента length вектором, который определяет количество повторений каждого элемента в векторе:
# automated length repetition
rep(1:5, 1:5)
[1] 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
# hand-fed repetition length vector
rep(1:5, c(1,1,1,2,2))
[1] 1 2 3 4 4 5 5
Это должно обеспечить возможность предоставления внешней функции для подачи второго аргумента rep
, чтобы динамически построить вектор, который расширяется в соответствии с данными.
Как и в seq
, более быстрыми, упрощенными версиями rep
являются rep_len
и rep.int
. Они отбрасывают некоторые атрибуты, которые поддерживает rep
и поэтому могут быть наиболее полезными в ситуациях, когда скорость является проблемой, а дополнительные аспекты повторяющегося вектора не нужны.
# repeat counting numbers, 1 through 5 twice
rep.int(1:5, 2)
[1] 1 2 3 4 5 1 2 3 4 5
# repeat vector with incomplete recycling
rep_len(1:5, length.out=7)
[1] 1 2 3 4 5 1 2
Векторы от построения констант: Последовательности букв и названий месяцев
R
имеет ряд построений в константах. Доступны следующие константы:
-
LETTERS
: 26 строчных букв латинского алфавита -
letters
: 26 строчных букв латинского алфавита -
month.abb
: трехбуквенные аббревиатуры для английских месяцев -
month.name
: английские имена за месяцы года -
pi
: отношение окружности круга к его диаметру
Из букв и констант месяца могут быть созданы векторы.
1) Последовательности букв:
> letters
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
> LETTERS[7:9]
[1] "G" "H" "I"
> letters[c(1,5,3,2,4)]
[1] "a" "e" "c" "b" "d"
2) Последовательности аббревиатур месяца или месяцев:
> month.abb
[1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
> month.name[1:4]
[1] "January" "February" "March" "April"
> month.abb[c(3,6,9,12)]
[1] "Mar" "Jun" "Sep" "Dec"