Поиск…


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

Используйте оператор : для создания последовательностей чисел, например, для использования в векторизации больших фрагментов кода:

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"


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow