Как сделать таблицу в r

Добавил пользователь Алексей Ф.
Обновлено: 04.10.2024

Находит широкое применение в различных областях знаний для моделирования, статистического анализа и обработки данных.

Основные достоинства:

Ресурсы в сети интернет для знакомства и освоения R

    - двухминутные видео в стиле “how to …” - QuickR, описываются основные возможности языка

Онлайн курсы

    - “Программирование на языке R”, начало курса 2 июня 2014

Пакеты (библиотеки функций) в R

Установка новых пакетов возможна через консоль R командой install.packages либо через графический интерфейс.

Внешний вид RStudio

Важно! R является регистрозависимым языком, поэтому надо быть внимательным при написании имен команд и переменных. Переменные big_table и Big_table рассматриваются как разные.

Установка и запуск дополнительных пакетов

Удобный способ уставновки дополнительный пакетов через графический интерфейс RStudio. Важно отметить галочкой автоматическую уставновку зависимостей.

Установка пакета data.table :

Загрузка пакета в рабочую область осуществляется через функции

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

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

R - язык функционального программирования

Функции производят операции над объектом и возвращают результат, при этом передаваемый объект не изменяется.

Если необходимо изменить состояние объекта, то результат функции присваивается переменной обозначающей этот объект.

Любая операция в R это функция

Типы данных

Типы данных в порядке увеличения приоритета:

  1. Логические (logical)
  2. Целочисленные (integer)
  3. Вещественные числа (numeric)
  4. Комлексные числа (complex)
  5. Текстовые (character)
  6. Списки (list)

Векторы и типы данных

Вектор может содержать данные только одного типа.

Какой класс будет иметь вектор?

Способы создания векторов

Матрицы

Матрица - двумерный набор элементов одного типа (таблица).

Массивы

Массив - многомерный набор элементов одного типа.

Factors

Factor - представляет номинальную или ранговую шкалу. Используется для представления Y в классификационных моделях.

Data.frames

Data.frame - двумерный набор данных (таблица). В отличие от матриц, колонки в data.frame могут содержать данные различного типа. Однако тип данных внутри каждой колонки может быть только один. Это объясняется тем, что data.frame это список векторов (колонок). Поэтому к data.frame могут быть применены различные функции применимые к спискам.

Формулы

Формулы - специальная форма выражения отношений между переменными в уравнении. Формулы используются при построении моделей для определения функциональной зависимости между параметрами.

Линейная комбинация (+):

Линейная комбинация с отсутствующим свободным членом (+0)

Функция идентичности I(), при этом выражение в скобках рассматривается как обычное математическое.

Формулы могут содержать математические функции

Символ точки (.) подставляет все имеющиеся переменные. Функция зависимости y от всех остальных переменных, которые будут передаваться в функцию выглядит так

Примеры формул
Синтаксис Модель Пояснение
Y ~ A \( Y = \beta_ + \beta_A \) Уравнение регрессии с неявно заданным свободным членом
Y ~ A + 0 \( Y = \beta_A \) Уравнение регрессии без свободного члена
Y ~ A + B \( Y = \beta_ + \beta_A + \beta_B \) Уравнеие модели первого порядка
Y ~ A + I(A^2) \( Y = \beta_ + \beta_A + \beta_A^2 \) Уравнеие модели второго порядка с одной переменной
Y ~ A:B \( Y = \beta_ + \beta_AB \) Уравнение модели первого порядка, в которое входят только произведения переменных
Y ~ A*B \( Y = \beta_ + \beta_A + \beta_B + \beta_AB \) Полное уравнение модели первого порядка, аналогично Y ~ A + B + A:B
Y ~ (A + B + C)^2 \( Y = \beta_ + \beta_A + \beta_B + \beta_C + \beta_AB + \beta_AC + \beta_BC \) Модель первого порядка включающая все произведения до порядка n, аналогично Y ~ A*B*C - A:B:C

Списки

Списки содержат упорядоченный набор элементов, каждый из которых может являться вектором, матрицей, массивом, списком и т.д.

Как правило в виде списков удобно хранить либо какие-то однотипные данные соответствующие разным итерациям, например, множество моделей. Или хранить разнородные данные, которые имеют смысловую связь, например, различные статистические характеристики отдельной модели.

Векторизация

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

Кстати оператор присваивания тоже является функцией, и присвоение можно выполнить в таком виде

Сложение двух векторов одинаковой длины происходит поэлементно

Как упоминалось, векторные вычисления могут производиться над любой структурой данных (вектор, матрица, data.frame и т.д.). Пусть у нас есть матрица

Умножим все ее элементы на 2, или возведем во вторую степень

Особенности векторизации

Если два вектора имеют различное количество элементов, то вектор меньшей длины будет повторяться столько раз чтобы соответствовать длине большего вектора.

Если длина большего вектора кратна длине меньшего вектора, такая операция будет произведена неявно, без уведомления пользоателя.

В случае если длины комбинируемых векторов различны, то будет произведено циклическое совмещение элементов меньшего вектора относительно элементов большего вектора и будет сгенерировано предупреждение.

Имена элементов векторов, матриц, data.frames, списков и т.д.

Все объекты поддерживают присвоение имен содержащимся в них элементам.

Обычный и именованный вектор

Другой способ создания именованного вектора

Аналогично векторам матрицы и data.frames имеют такие свойства как rownames и colnames , которые позволяют изменять имена колонок и строк.

Удаление имен осуществляется присвоением специального типа NULL

Или для векторов

При этом к элементам уже нельзя будет обращаться по имени, а только по индексу.

Преобразование типов и структур данных друг в друга

Преобразование типов данных осуществляется через группу функций, начинающихся на as.

Пример конвертации целочисленного вектора в текстовый

Особенности приведения чисел выраженных как factors к числовому виду.
Преобразуем вектор целых чисел в номинальную шкалу (factor).

Для обратной конвертации использование функции as.integer недостаточно.

Это связано с внутренним представлением типа данных factor. Эта структура представляет собой набор целочисленных значений, каждому из которых присвоено имя. В данном примере именами являются значения 1 и 0.
Поэтому для корретного преобразования factor в целочисленный тип данных необходимо предварительно провести конвертацию в текстовый вид.

Данная операция часто вызывает затрудние и служит причиной ошибок.

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

Преобразоваание матрицы в data.frame

Справка в R - прекрасный источник информации

Полное описание функций и возвращаемых ими значений с примерами можно найти в справке.

Дополнительно можно вызывать справку клавишей F1, когда курсор стоит на имени функции в тексте скрипта или в консоли.

Если необходимо найти какую-либо функцию по ее имени или части имени, то удобно пользоваться функциями из пакета sos .
Установите пакет sos и выполните следующие команды:

Индексация векторов, матриц, data.frames и т.д.

Индексация - исключительно эффективный и мощный инструмент для работы с данными.

Индексы могут быть:

  • числовыми
  • логическими
  • текстовыми

Для индексирования используется три типа выражений:

  1. [ - выбирает элементы вектора/списка/массива и т.д.
  2. $ - выбирает один элемент из data.frame/списка по его имени.
  3. [[ - выбирает элементы из вектора/списка/массива и т.д, но отбрасывает имена, если они есть.

Числовые индексы

Выбор элементов вектора по их индексу

Из этого примера видно, что для индексирования и выбора элементов на самом деле используется вектор индексов.

Чтобы выбрать каждый второй элемент по индексу надо сгенерировать вектор, состоящий из четных чисел и использовать его для индексации исходного вектора.

Для удаления элементов по значению индекса перед ними добавляют знак минус

Особенности индексирования позволяют менять положение элементов и дублировать их. Это очень эффективный прием, о котором часто забывают.

С точки зрения индексирования матрицы и data.frames почти ничем не отличаются.

Создадим тестовый набор данных:

Выберем элемент строки 1 и колонки 2

Выберем все значения строки 1. Результатом будет новый data.frame

Выберем все значения колонки 1. Результатом будет вектор! Мы говорили выше, что data.frame это список колонок-векторов, и при выборе одной колонки присходит автоматическое преобразование результата к ветору.

Чтобы избежать этого необходимо добавить опцию drop . Теперь результатом будет data.frame

Для выбора блоков данных в качестве индексов строк и стобцов можно использовать

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

что аналогично предыдущему примеру, приводящему к тому же результату

Текстовые индексы

Текстовые индексы работают аналогично числовым

Выбор блока данных

Для текстовых индексов отсутствует возможность использования отрицательных значений индексов, т.е. чтобы удалить строку/колонку необходимо сформировать вектов с именами строк/колонок, которые необходимо оставить.

Логические индексы

Генерация логического индекса (вектора) для вектора a

который можно использовать для выбора соответствующих элементов

Возможна комбинация логических индексов с использованием операторов AND (&) и OR (|)

Логическое отрицание, оператор NOT (!), инвертирует значения логических индексов

Логический индекс (вектор) можно преобразовать в числовой. Функция which возвращает порядковые номера элементов, значение которых TRUE

Индексы списков

Для извлечения определенных элементов списка можно использовать числовые, текстовые и логические индексы. Однако при индексации списков есть некоторые особенности.
Создадим произвольный именованый список из двух элементов.

Выберем первый элемент списка запросом показанным ниже.

Обратите внимание, что в результате мы получим новый список содержащий только один элемент. Проверим это

Выберем первый элемент списка используя другую функцию

В этом случае запрос вернул содержимое первого элемента списка - целочисленный вектор.
Это важная особенность, которую упускают начинающие.

Альтернативный вариант доступа к содержимому одного элемента списка по его имени возможен с использоваем специальной конструкции ($)

Это аналогично следующему вызову с использованием текстового индекса

Индексы data.frames

Выборка данных из data.frames была описана выше и ничем не отличается от других структур данных (вектров, матриц и т.д.). Единственная особенность вытекает из того, что data.frame это список векторов (колонок), то для выбора одной колонки по имени можно использовать конструкцию аналогичную для списков

Такое выражение всегда возвращает вектор.

Особенности индексов

Если идет обращение к несуществующему индексу, то вернется специальное значение NA

NA специальное значение указывающее, что значение не определено (Not Available).

Если присваивать значение элементу с несуществующим индексом, то этот элемент будет создан.

Другой пример в результате которого создаются NA

Для проверки является ли значение NA используется специальная функция

Все то же самое справедливо и для текстовых индексов

Аналогично для того, чтобы добавить новый элемент в список (колонку/строку в data.frame) используется новое имя или числовой индекс.
Пример с data.frame. Создадим data.frame и добавим новую переменную, которая будет равняться значению первой колонки во второй степени.

Пример со списком. Создадим именованый список из двух элементов и добавим к нему третий элемент.

Читайте также: