Добавить в цитаты Настройки чтения

Страница 4 из 12



> Матрица2[3, ] <-c(3,8,13)

# Матрица2[3 строка, ] <-c(3,8,13)

> Матрица2

[,1] [,2] [,3]

[1,] 1 6 11

[2,] 2 7 12

[3,] 3 8 13

[4,] 4 9 14

[5,] 5 10 15

R также работает и с массивами данных (array), которые сходны с матрицами, но могут иметь данные с более чем двумя измерениями. Очевидно, что массивы данных – это просто расширенные матрицы. Как и в матрицах, все элементы массива должны иметь одинаковый тип данных. Массивы данных создаются при помощи функции array. Например, массив из последовательности чисел 1,2 …30, состоящий из двух матриц с тремя строками и пятью столбцами можно создать следующим образом:

> Мой.Массив<– array(1:30, dim=c(3,5,2))

# аргумент dim указывает на размер массива данных

# dim =c (3,5,2) создает из вектора 1:30 массив данных из 3 строк, 5 столбцов и 2 матриц.

# если бы R понимал по-русски, то эту команду можно было бы ввести так:

# Мой.Массив<– множество(1:30, размер=объединить(3,5,2))

> Мой.Массив

, , 1

[,1] [,2] [,3] [,4] [,5]

[1,] 1 4 7 10 13

[2,] 2 5 8 11 14

[3,] 3 6 9 12 15

, , 2

[,1] [,2] [,3] [,4] [,5]

[1,] 16 19 22 25 28

[2,] 17 20 23 26 29

[3,] 18 21 24 27 30

> dim(Мой.Массив)

[1] 3 5 2

Заметим, что в функции array в скобках сначала дается вектор 1:30, из которого создается массив данных, затем следует выражение dim=c(3,5,2), предписывающее с помощью функции объединения создать массив данных, соответственно, из трех строк, пяти столбцов и двух матриц.

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

Мой.Массив[3,3,2]

> Мой.Массив[3,3,2]

[1] 24

Таблицы данных, которые в отличие от матриц могут состоять из различных типов данных, широко используются в R. Таблицы данных создаются при помощи функции data.frame(). Покажем, как это делается на конкретном примере. Сначала создадим три вектора данных, из которых один будет текстовый, а два других цифровых:

> Успеваемость <-c('Отличники', 'Хорошисты' , 'Троечники', 'Двоечники')

> Успеваемость

[1] "Отличники" "Хорошисты" "Троечники" "Двоечники"

> Студенты<-c(2, 5,10,2)

> Студенты

[1] 2 5 10 2

> Студентки <-c(3,7,14,1)

> Студентки

[1] 3 7 14 1

Теперь создаем таблицу с помощью функции data.frame, которую назовем Моя.Таблица:

> Моя.Таблица <– data.frame(Успеваемость,Студенты, Студентки)

> Моя.Таблица

Успеваемость Студенты Студентки

1 Отличники 2 3

2 Хорошисты 5 7



3 Троечники 10 14

4 Двоечники 2 1

# узнаем является ли Моя.Таблица таблицей:

> is.data.frame(Моя.Таблица)

# по-русски: таблица.ли(Моя.Таблица)

[1] TRUE

# по-русски ответ: ИСТИНА, то есть этот объект является таблицей

Далее проверим структуру данных Моя.Таблица с помощью следующей функции:

> str(Моя.Таблица)

# по-русски: структура(Моя.Таблица)

'data.frame':      4 obs. of 3 variables:

$ Успеваемость: Factor w/ 4 levels "Двоечники","Отличники",..: 2 4 3 1

$ Студенты : num 2 5 10 2

$ Студентки : num 3 7 14 1

# по-русски: 'data.frame'– таблица

# 4 obs. of 3 variables – 4 наблюдения из 3 переменных

# знак $ обозначет переменные, включенные в таблицу

# Factor w/ 4 levels – фактор из 4 уровней

# num – количественные данные

Отдельный элемент таблицы можно извлечь, обозначив его положение (номер строки и номер столбца) в квадратных скобках:

> Моя.Таблица[3,1]

[1] Троечники

Levels: Двоечники Отличники Троечники Хорошисты

Внизу из текстового элемента Моя.Таблица есть следующая строка: «Levels: Двоечники Отличники Троечники Хорошисты». Levels в переводе на русский язык означает Уровни. Так называемые «Уровни» (Levels) присваиваются факторам. Фактор – это векторный объект, кодирующий категориальные данные (классы), в состав которых входят как номинальные, так и порядковые данные. Номинальные данные – это качественные данные, которые отражают условные коды количественно не измеряемых категорий, которые также не подлежат ранжированию или упорядочиванию. В качестве примера номинальных данных можно привести индексы отделений связи, поскольку они служат только для их идентификации. По отношению к номинальным данным возможны только операции «равенство-неравенство».

В отличие от номинальных порядковые данные могут быть ранжированы как в порядке убывания, так и увеличения какого-либо их качества. Но в отличие от обычных количественных данных, которые можно выразить в конкретных единицах и к которым можно применить широкий круг алгебраических операций, к порядковым данным можно применить лишь операции «равенство-неравенство», а также «больше-меньше». Порядковые данные используются в том случае, когда порядок ранжирования элементов по какому-то критерию важен, а вот количественные различия между различными рангами этих элементов не поддаются точной оценке.

Например, такие ответы респондентов на вопрос социолога, как: «согласен», «частично согласен», «нет могу сказать, согласен или не согласен», «частично не согласен», «не согласен», – можно ранжировать по степени их согласия или степени их несогласия, в то время как количественную разницу между вариантами этих ответов трудно оценить в каких-то конкретных единицах. Следовательно, эти данные являются порядковыми или ранжируемыми. Впрочем, иногда порядковым данным могут присваиваться какие-то условные порядковые числа, но и в этом случае количественная разница между различными рангами одной и той же последовательности носит весьма условный характер. Например, порядковыми данными являются пятибалльные оценки знаний учащихся, поскольку они не могут быть сгенерированы методом измерения в конкретных единицах, а получены методом достаточно субъективного оценивания.

Созданная нами переменная Успеваемость относится к числу ранжируемых, но по умолчанию уровни фактора в R присваиваются текстовому вектору в алфавитном порядке. Поскольку переменная Успеваемость является порядковой, то такая градация в этом случае не подходит. Поэтому сначала проверим тип данных переменной Успеваемость, а затем присвоим значение различных уровней фактора в порядке возрастания успеваемости с помощью следующей команды:

> class(Успеваемость)

[1] "character"

# тип данных – текстовый

> Успеваемость <– factor(Успеваемость, order=TRUE, levels=c('Двоечники', 'Троечники', 'Хорошисты', 'Отличники'))

# превращает вектор Успеваемость в упорядоченный фактор

# число уровней фактора задается при помощи аргумента levels

> Успеваемость

[1] Отличники Хорошисты Троечники Двоечники

# уровни фактора в порядке их возрастания

Levels: Двоечники < Троечники < Хорошисты < Отличники

> class(Успеваемость)

[1] "ordered" "factor"

# тип данных – упорядоченный фактор

Список в R представляет собой упорядоченный набор объектов с различными типами данных. В результате под одним своим именем списки могут включать векторы, матрицы, таблицы и другие списки. Список можно создать при помощи функции list():

> Мой.Список <– list(Моя.Таблица, Успеваемость, Матрица1,Матрица2)

# по-русски: Мой.Список <– список(Моя.Таблица, Успеваемость, Матрица1,Матрица2)

> Мой.Список

[[1]]

Успеваемость Студенты Студентки

1 Отличники 2 3