17. Различие между объектами типа matrix и data.frame.
17. Различие между объектами типа matrix и data. frame. В matrix можно использовать только один тип данных во всей матрице (или символьный, или числовой, логический). В data. frame можно использовать несколько типов данных, но при этом в одном столбике д. б. одинаковый тип данных. В отличие от вектора или матрицы, которые могут содержать данные только одного типа, в список (list) или таблицу (data frame) можно включать сочетания любых типов данных. Это позволяет эффективно, т. е. в одном объекте, хранить разнородную информацию. matrix (матрица) – частный случай массива с k = 2. У массива и матрицы все элементы одного и того же типа. Data. frame – таблица состоящая из нескольких векторов одинаковой длины, но возможно различных типов. Data. frame - двумерный набор данных (таблица). В отличие от матриц, колонки в data. frame могут содержать данные различного типа. Однако тип данных внутри каждой колонки может быть только один. Это объясняется тем, что data. frame это список векторов (колонок). Поэтому к data. frame могут быть применены различные функции применимые к спискам. 18. Какой тип объектов в системе R разработан для хранения категориальных данных? factor (числовой, символьный) Нет factor (фактор) – категорийная переменная В статистике данные очень часто группируют в соответствии с тем или иным признаком, например, полом, социальным положением, стадией болезни, местом отбора проб и т. п. В R существует специальный класс векторов – факторы (factors), которые предназначены для хранения кодов соответствующих уровней номинальных признаков. Часто уровни факторов кодируют в виде чисел. В таких случаях очень важно " проинструктировать" программу так, чтобы она " распознавала" уровни номинальной переменной от чисел как таковых.
Предположим, что в эксперименте по испытанию эффективности нового медицинского препарата было задействовано 10 пациентов-добровольцев, из которых шесть пациентов принимали новый препарат, а четверо остальных – плацебо (например, таблетки активированного угля). Для обозначения членов этих двух групп мы можем использовать коды 1 (препарат) и 0 (плацебо). Соответственно, информацию о всех десяти участниках эксперимента мы могли бы сохранить в виде следующего вектора:
treatment < - c(1, 1, 1, 1, 1, 1, 0, 0, 0, 0) treatment [1] 1 1 1 1 1 1 0 0 0 0
При таком подходе, однако, программа будет " рассматривать" вектор treatment в качестве числового (проверьте при помощи команды class(treatment)). Это будет ошибкой с нашей стороны, поскольку ноль и единица обозначают лишь два уровня номинальной переменной. С таким же успехом мы могли бы использовать, например, 10 для обозначения контрольной группы пациентов (т. е. пациентов принимавших плацебо) и 110 для обозначения пациентов, принимавших испытываемый препарат. Для преобразования числового (или текстового) вектора в фактор в R существует одноименная функция factor():
> treatment < - factor(treatment, levels = c(0, 1)) > treatment [1] 1 1 1 1 1 1 0 0 0 0 Levels: 0 1 Обратите внимание на то, что теперь при выводе содержимого объекта treatment программа подсказывает нам, что этот объект является фактором с двумя уровнями (Levels: 0 1). Дополнительно убедиться в этом можно при помощи все той же команды class(treatment):
class(treatment)) [1] " factor" Существует также специальная команда для создания факторов: gl(n, k, length = n*k, labels = 1: n), где n – количество уровней фактора; k – число повторов для каждого уровня; length – размер итогового объекта; labels – необязательный аргумент, который можно использовать для указания названий каждого уровня фактора. Например, выполнение следующей команды приведет к созданию вектора my. fac, являющегося фактором с
двумя уровнями – Control и Treatment, причем каждая из меток " Control" и " Treatment" будет повторена по 8 раз: my. fac = gl(2, 8, labels = c(" Control", " Treatment" )) my. fac [1] Control Control Control Control Control Control Control [8] Control Treatment Treatment Treatment Treatment Treatment Treatment [15] Treatment Treatment Levels: Control Treatment 19. Способы адресации элементов в объектах типа matrix и data. frame. R работает с объектами, которые имеют два встроенных атрибута: тип данных и длина. Тип данных – вид элемента; имеются четыре типа данных: num(числовой), char(символьный), complex(комплексный) и logical(логический). Длина – общее количество элементов объекта. Приведем список возможных типов данных для различных объектов.
matrix (матрица) – частный случай массива с k = 2. У массива и матрицы все элементы одного и того же типа.
Data. frame – таблица состоящая из нескольких векторов одинаковой длины, но возможно различных типов.
Matrix
Матрицы — очень распространенная форма представления данных, организованных в форме таблицы. Про матрицы в R, в общем, нужно знать две важные вещи — во-первых, что они могут быть разной размерности и, во-вторых, что матриц как таковых в R, по сути, нет.
Начнем с последнего. Матрица в R — это просто специальный тип вектора, обладающий некоторыми добавочными свойствами (атрибутами), позволяющими интерпретировать его как совокупность строк и столбцов. Предположим, мы хотим создать простейшую матрицу 2 × 2.
Для начала создадим ее из числового вектора:
> m < - 1: 4
> m
[1] 1 2 3 4
> ma < - matrix(m, ncol=2, byrow=TRUE)
> ma
[, 1] [, 2]
[1, ] 1 2
[2, ] 3 4
> str(ma)
int [1: 2, 1: 2] 1 3 2 4
> str(m)
int [1: 4] 1 2 3 4
Как видно, структура (напомним, структуру любого объекта можно посмотреть при помощи очень важной команды str()) объектов m и ma не слишком различается, различается, по сути, лишь их вывод на экран компьютера. Еще очевиднее единство между векторами и матрицами прослеживается, если создать матрицу несколько иным способом:
> mb < - m
> mb
[1] 1 2 3 4
> attr(mb, " dim" ) < - c(2, 2)
> mb
[, 1] [, 2]
[1, ] 1 3
[2, ] 2 4
Выглядит как некий фокус. Однако все просто: мы присваиваем вектору mb атрибут dim («dimensions», размерность) и устанавливаем значение этого атрибута в c(2, 2), то есть 2 строки и 2 столбца. Читателю предоставляется догадаться, почему матрица mb отличается от матрицы ma (ответ см. в конце главы).
Мы указали лишь два способа создания матриц, в действительности их гораздо больше. Очень популярно, например, «делать» матрицы из векторов-колонок или строк при помощи команд cbind() или rbind().
Если результат нужно «повернуть» на 90 градусов (транспонировать), используется команда t().
Наиболее распространены матрицы, имеющие два измерения, однако никто не препятствует сделать многомерную матрицу (массив):
> m3 < - 1: 8
> dim(m3) < - c(2, 2, 2)
> m3
, , 1
[, 1] [, 2]
[1, ] 1 3
[2, ] 2 4
, , 2
[, 1] [, 2]
[1, ] 5 7
[2, ] 6 8
m3 — это трехмерная матрица (или, по-другому, трехмерный массив). Естественно, показать в виде таблицы ее нельзя, поэтому R выводит ее на экран в виде серии таблиц. Аналогично можно создать и четырехмерную матрицу (как встроенные данные Titatic). Многомерные матрицы в R принято называть «arrays».
Data frame
И теперь о самом важном типе представления данных — таблицах данных (data frame). Именно таблицы данных больше всего похожи на электронные таблицы Excel и аналогов, и поэтому с ними работают чаще всего (особенно начинающие пользователи R). Таблицы данных — это гибридный тип представления, одномерный список из векторов одинаковой длины. Таким образом, каждая таблица данных — это список колонок, причем внутри одной колонки все данные должны быть одного типа (а вот сами колонки могут быть разного типа). Проиллюстрируем это на примере созданных ранее векторов:
> d < - data. frame(weight=w, height=x, size=m. o, sex=sex. f)
> d Матрицы и многомерные матрицы позволяют хранить элементы только одного типа и поэтому не очень хорошо приспособлены для работы с реальными данными. Реальные данные, как правило, представляют собой набор однотипных наблюдений. Каждое наблюдение, в свою очередь, есть совокупность элементов разного типа (например, для медицинских данных характерно наличие поля «имя» строкового типа, категориального поля «пол» и числового поля «возраст»).
Таким образом, помещая отдельные наблюдения в строки, приходим к своеобразной матрице, таблице данных, в которой элементы в одном столбце должны обязательно иметь одинаковый тип, но этот тип может меняться от столбца к столбцу. В статистической литературе традиционно отдельное наблюдение называется индивидом, а столбец с данными — признаком.
С другой стороны, объект «таблица данных» (data frame) может рассматриваться как обычный список векторов одинаковой длины (собственно, он таковым и является). Создать таблицу данных можно при помощи функции data. frame(..., row. names = NULL). В качестве аргументов здесь передаются столбцы создаваемого набора данных либо в виде пар типа имя = значение, либо просто «как есть» (в таком случае столбец получит автоматически назначаемое имя
V1, V2, ... ). Аргумент row. names позволяет задать вектор с названиями для отдельных строк (конечно, его длина обязательно должна совпадать с длиной векторов данных, а сами имена не должны повторяться). Отметим, что большинство объектов могут быть преобразованы в объект типа data. frame «естественным» образом, например:
> data. frame(matrix(1: 6, nrow = 2, ncol = 3))
X1 X2 X3
1 1 3 5
2 2 4 6
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|