Типы данных r studio

Обновлено: 04.07.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 + C)^2 \( Y = \beta_ + \beta_A + \beta_B + \beta_C + \beta_AB + \beta_AC + \beta_BC \) Модель первого порядка включающая все произведения до порядка n, аналогично Y

Списки

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

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

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

В 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 и добавим новую переменную, которая будет равняться значению первой колонки во второй степени.

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


Я сам изучал R в течение последних нескольких недель.

В своей статье я рассказываю о языке программирования R и его главных концепциях, которые пригодятся каждому исследователю данных.

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

Я очень советую именно R по многим причинам.

R ст а новился всё известнее и известнее, пока не стал одним из самых популярных языков программирования. Его создали статистики (специалисты по статистике) для статистиков. Он хорошо сочетается с другими языками программирования, например с C++, Java, SQL. Более того, его воспринимают как язык, который отлично подходит для работы со статистикой. А в результате большое количество финансовых организаций и крупных вычислительных компаний применяют R в своих исследованиях и разработках.

Python — язык для решения задач общего характера, а R — язык программирования для аналитики.

Этот текст объяснит следующие ключевые области языка R:

  1. Что такое R?
  2. Как установить R?
  3. Где писать код на R?
  4. Что такое R-скрипт и R-пакет?
  5. Какие типы данных есть в R?
  6. Как декларировать переменные и их область действия в R?
  7. Как писать комментарии?
  8. Что такое векторы?
  9. Что такое матрица?
  10. Что собой представляют списки?
  11. Что такое датафреймы?
  12. Различные логические операции в R.
  13. Функции в R.
  14. Циклы в R.
  15. Считывание и запись внешних данных в R.
  16. Как производить статистические вычисления в R.
  17. Построение графиков и диаграмм в R.
  18. Объектно-ориентированное программирование в R.
  19. Знаменитые библиотеки R.
  20. Как установить внешние библиотеки R.

Приступим же!…

Я буду объяснять язык программирования, начиная с основ, в таком стиле, чтобы вам было легче разобраться. Стоит сказать, что ключ к прогрессу в разработке — это постоянная практика. Чем больше, чем лучше.

Этот материал должен стать целостной базой для вас — читателей.

  • R — это бесплатный язык программирования с лицензией GNU. В сущности R — это статистическая среда.
  • R в основном используется для статистических вычислений. Он имеет набор алгоритмов, которые углубленно применяются в области машинного обучения. А конкретнее — в анализе временных рядов, классификации, кластеризации, линейном моделировании и т.д.
  • Также R — это среда, в которой есть набор программных пакетов, с которыми можно производить вычисления для построения диаграмм и для манипуляций с данными.
  • R значительно применяется в проектах статистических исследований.
  • R очень похож на другой язык программирования — S.
  • R компилируется и запускается на UNIX, Windows, MacOS, FreeBSD и Linux.
  • В R есть большое количество структур данных, операторов и параметров. Он включает многое: от массивов до матриц, от циклов до рекурсии вместе с интеграцией с другими ЯП, например с C, C++ и Fortran.
  • C можно использовать для обновления объектов в R напрямую.
  • R можно дополнять новыми пакетами.
  • R — интерпретатор.
  • Авторы R вдохновлялись S+, так что, если вы знакомы с S, изучение R будет для вас простым следующим шагом.

Преимущества R:

Вдобавок к плюсам, о которых я написал выше:

  • R просто выучить.
  • В среде есть очень много бесплатных пакетов с открытым исходным кодом для статистики, аналитики и графики.
  • Богатство различных научных трудов вместе с их применением в R в вашем распоряжении.
  • Лучшие мировые университеты учат своих студентов R, следовательно, он стал принятым стандартом, продолжит расти и развиваться.
  • Широкие возможности интеграции с другими языками.
  • Огромная поддержка в сообществе специалистов.

Ограничения R:

Также есть и некоторые ограничения:

  • R не такой быстрый, как C++. К тому же, есть проблемы с его защищённостью и управлением памятью.
  • R имеет много пространств имен. Иногда такое впечатление, что их даже слишком много. Тем не менее ситуация улучшается.
  • Так как R — это статистический язык, то он не такой интуитивный, как Python, и в нём не так просто работать с ООП, как в Python.

А теперь я представлю вам язык R в формате кратких описательных разделов.

Можете установить R на эти платформы:

Первый шаг — загрузите R:

Вот вам и линки:

Есть разные графические интерфейсы. Очень советую R-Studio.


Загрузите десктопную версию RStudio:

Если вы работаете на Windows, в процессе установки R Studio по умолчанию попадет сюда:

Это два ключевых компонента в языке. В этом разделе поверхностно расскажу о концепциях.

Пакет R

Так как R — это ЯП с открытым кодом, важно понимать, что тут подразумевается под пакетом. Пакет в сущности группирует и упорядочивает код, а также другие функции. Пакет — это библиотека, в которой содержится большое количество файлов.

Специалисты по данным могут писать и делиться своим кодом с другими. Будь это их собственный код с нуля или расширение пакетов других авторов. Пакеты позволяют специалистам по данным переиспользовать код и распространять его среди остальных.

Пакеты созданы, чтобы контейнировать функции и наборы данных.

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

В интернете в открытом доступе есть десятки тысяч пакетов R. Эти пакеты собраны в центральном репозитории. Вообще есть разные репозитории. Это и CRAN, и Bioconductor, и любимый Github.

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

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

Чтобы загрузить пакет, напечатайте:

Чтобы пользоваться функциональностью пакета, напишите в его имени::название функции.

Например, если мы хотим применить функцию “AdBCDOne” из пакета “carat”, можем сделать следующее:

R Script

Скрипт R — это место, где специалист по данным может писать статистический код. Это текстовый файл с расширением .R, например мы может назвать скрипт tutorial.R.

Можем создать много скриптов в пакете.

В качестве примера, если вы создали два скрипта R:

  1. blog.R (для блога)
  2. publication.R (для публикации)

И если вы хотите вызвать функции publication.R в blog.R, то вам стоит пользоваться командой source(“target R script”). Она импортирует publication.R в blog.R:

Создаём пакет скрипта

Процесс относительно простой. В сущности вот, что нужно сделать:

  1. Создайте файл описания.
  2. Создайте R.scripts и добавьте любые датасеты, документацию, тесты, которые должны быть в этом пакете.
  3. Напишите свои функции в скриптах R.
  4. Можем применить devtools и roxygen2, чтобы создать пакеты R с помощью такой команды:

Очень важно разобраться в разных типах данных и структурах в R. Так вы сможете пользоваться языком эффективно. В этом разделе я опишу концепции.

Типы данных

Вот базовые типы данных в R:

  1. символ (character): может быть таким “abc” или таким “a”
  2. целочисленный (integer): например 5L
  3. числовой (numeric): например 10.5
  4. логический (logical): TRUE или FALSE
  5. комплексный (complex): например 5+4i

Ещё можем пользоваться командой typeof(variable), чтобы определить тип переменной.

Чтобы найти метаданные (атрибуты типа), используйте команду attributes(variable).

Структуры данных

В R достаточно много структур данных. Привожу самые важные:

  1. Вектор (vector): самая важная структура, которая в сущности является набором элементов.
  2. Матрица (matrix): похожая на таблицу структура со строками и колонками
  3. Датафрейм (data frame): табличная структура для статистических операций
  4. Списки (lists): набор, в котором может быть комбинация типов данных.
  5. Факторы (factors): для представления категориальных данных.

Я расскажу обо всех этих типах и структурах данных, так что начинаем строить фундамент.

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

Переменная нужна, чтобы сохранять значение, которое может меняться в вашем коде.

Чтобы понять, важно запомнить, что такое окружение в R. В сущности окружение — это место, где хранятся переменные. Это набор пар, где первый элемент — это символ (переменная), а второй — её значение.

Окружение имеет иерархическую структуру (похожую на дерево). Следовательно, окружение может иметь родителя и множество дочерних ответвлений. Корневое окружение — это окружение без родителя.

Надо декларировать переменную и присвоить ей значение при помощи следующего:

После этого значение “my variable” будет присвоено переменной x. Функция print() выведет значение x, которое равно “my variable”.

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

Чтобы создать набор целых чисел, мы можем сделать следующее:

1 — первое значение, а 5 — последнее значение из набора.

В результате выведутся числа от 1 до 5.

Помните, что IDE R-Studio отслеживает переменные:


Функцию ls() можно писать, чтобы показать переменные и функции в текущем окружении.

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

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

Можем добавить комментарий одной строкой:

Можем добавить комментарий в несколько строк при помощи двойных кавычек:

Памятка: в R-Studio выделите код, который вы собираетесь закомментировать и нажмите сочетание клавиш Ctrl+Shift+C.

Так вы автоматически сделаете нужную часть программы комментарием.

Вектор считается одной из самых важных структур данных в R. В сущности вектор представляет собой набор элементов, где у всех элементов должен быть одинаковый тип данных: например, только логический (истинно/ложно — TRUE/FALSE), числовой, знаковый.

Также можем создать пустой вектор:

По умолчанию тип вектора логический. По команде ниже выведется слово “logical”, так как это и есть тип данных вектора:

Чтобы создать вектор со своими элементами, пишите функцию конкатенации (объединения строк):

Результат выполнения этого кода будет таким:

[1] “Farhad”
[2] “Malik”
[3] “FinTechExplained”

Если мы захотим найти длину вектора, можем воспользоваться функцией length():

Результат вывода строки выше будет 3. Потому что в заданном векторе x 3 элемента. Чтобы добавить элементы в вектор, можем комбинировать элемент с вектором.

Например, чтобы добавить слово “world” к началу вектора с одним элементом слова “hello”, нужно написать так:

В результате напечатается “world” “hello”.

Если мы смешиваем типы элементов, то R в свою очередь будет приспосабливать тип вектора в ответ на это. Тип вектора (режим) будет становиться таким, каким должен быть по своему расчёту, чтобы подходить этому вектору:

И хотя второй элемент имеет логическое значение, тип будет выведен как “character” (символ).

Над векторами можно производить операции.

Для примера, вот вам умножение скаляра на вектор:

В результате напечатается 2,4,6.

Также можем сложить два вектора:

Результат будет: 5 7 9

Если векторы — это знаки и мы хотим сложить их вместе, то:

Error in x + y : non-numeric argument to binary operator (ошибка в выражении x + y: нечисловой аргумент для бинарного оператора).

Редактирование таблиц в R

В прошлый раз мы говорили о том, как загрузить данные в среду R. Следующим важным этапом является их подготовка к визуализации и статистическому анализу. Для этого нам, как правило, необходимо внести некоторые изменения в таблицу, например: удалить столбец или строку, переименовать колонку, произвести сортировку или фильтрацию данных. Многие из этих операций можно сделать в Excel. Однако, зачастую возникают ситуации, когда необходимо изменить структуру или содержание таблицы прямо в ходе анализа. И вот тут у начинающих пользователей R могут возникнуть проблемы. В этой статье мы научимся их решать.

Структура таблицы и изменение типов данных

Лучший способ для закрепления новых знаний - это практика. Поэтому мы продолжим работать с таблицей физических данных студентов одного из военных вузов "voenvuz". Итак, загрузим знакомую уже нам таблицу в Rgui (таблицу можно скачать здесь).

Функции head и str

Для того, чтобы посмотреть правильно ли загрузились данные, введем команду head(voenvuz) , которая покажет первые 6 строчек нашей таблицы. Если все загрузилось нормально, то переходим к команде str(voenvuz) , которая выведет в консоль структуру таблицы.

Функция str R

Итак, в поле "data.frame" мы видим, что наша таблица состоит из 20 строк и 6 столбцов. Под ним располагается список названий столбцов, тип данных и первые шесть элементов каждого столбца. Обратите внимание, что колонки "Name" и "Rhesus.factor" сейчас хранят в себе категориальный тип данных (Factor), а остальные - целочисленный. Компьютер вычислил это автоматически, но в нашем случае - вычислил неверно. Прежде чем мы исправим типы этих данных, немного теоретической информации.

О типах данных

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

В языке R можно выделить 5 основных типов данных, хранящихся в столбцах таблицы:

  • числовой (numeric);
  • целочисленный (integer);
  • текстовый (character);
  • категориальный (Factor);
  • логический (logical).

Есть также комплексный (complex) и сырой (raw) типы данных, но они редко встречаются, и поэтому я о них здесь писать не буду. Пропущенные данные обозначаются как "NA" (от англ. not available - недоступно), и тогда R игнорирует их.

Изменим типы данных на практике

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

Идем дальше, столбец "Age" был правильно идентифицирован как целочисленный. А вот столбцы "Height" и "Weight" являются скорее числовыми, т.к. могут содержать промежуточные значения, например 182.5. Переделаем их из типа Integer в тип Numeric:

Последнее, что нам нужно - это изменить тип данных в столбце "Blood.group". Каждый из студентов так или иначе имеет одну из 4 групп крови, соответственно, этот столбец содержит четыре категории: "1", "2", "3", "4". Другими словами, в нем должен находиться категориальный тип данных:

В итоге, повторив команду str(voenvuz) , мы должны получить вот такую картинку.

Меняем тип данных в R

Редактирование элементов таблицы

Иногда возникают ситуации, когда необходимо вставить в таблицу столбец или строку, изменить значение элемента или название колонки. Наша таблица - не исключение и нуждается в доработке.

Добавление строк

Добавим в таблицу данные о двух новых студентах: Иване и Олеге. Для этого необходимо создать новую структуру - список (list) , В список мы по порядку вносим параметры, совпадающие со структурой таблицы (напомню, что в кавычках мы пишем нечисловые типы данных):

После, при помощи функции rbind (от англ. row bind, что дословно означает "связать строчки") мы объединим эти два списка с нашей таблицей:

Добавление столбцов

Теперь у нас в таблице два Ивана и два Олега. В данном случае хорошо было бы прописать для каждого студента свой идентификационный номер (ID), чтобы не запутаться, кто есть кто. Для этого создадим структуру, которая называется вектор (последовательность элементов одного типа). В него мы запишем последовательность от 1 до 22, так, чтобы у каждого из наших 22 студентов был свой уникальный ID:

Теперь объединим наш вектор с таблицей, воспользовавшись функцией cbind (от англ. column bind):

Не забудьте поменять тип данных нового столбца на символьный:

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

Проверьте, что получилось, используя уже знакомые нам функции head и str

Удаление строк и столбцов

Существует относительно "универсальная формула" для удаления элементов таблицы: new.data <- my.data[ , ]
Для того, чтобы корректно ее использовать необходимо запомнить несколько правил:

  1. После имени таблицы пространство внутри квадратных скобок следует разделить на две части запятой.
  2. Все, что находится до запятой, относится к строчкам, все что после - к столбцам.
  3. Поставьте минус перед номером столбца или номером строки, которую собираетесь удалить.
  4. Если таких элементов несколько, используйте функцию c(. ) : внутри скобок перечисление элементов через запятую.

В нашем случае, удалять из таблицы ничего не надо, но я покажу пару примеров, назвав "укороченные" таблицы именами "trash1", "trash2", "trash3", "trash4":

Изменение имен столбцов и данных в ячейках:

Переименуем колонку "Rhesus.factor" на укороченное "Rhesus". Для этого нужно вызвать функцию names , написать в параметрах функции имя таблицы и номер столбца, и присвоить ему новое имя :

Изменение данные в ячейках таблицы не представляет особой сложности. В квадратных скобках прописываем координаты нужной ячейки (до запятой - строка, после запятой - столбец) и присваиваем новое значение:

Редактируем таблицу в R

После всех наших манипуляций мы должны получить вот такую таблицу данных:

Фильтрация и сортировка данных

В качестве примера, исключим из таблицы данных студентов, чей возраст больше 23 лет. Существует множество способов решения подобного рода задач, включая циклы if-else, for или while (о них будет написана отдельная статья). Однако в нашем случае хватит простого фильтра, основанного на логическом операторе "< wp-block-preformatted"> voenvuz.final <- voenvuz[voenvuz$Age <= 23, ]

Того же результата мы добьемся, если будем использовать логические операторы ">" (больше) и "!" (исключить):

Итак, мы получили финальную версию таблицы "voenvuz.final ". Осталось лишь упорядочить столбцы:

И произвести сортировку данных по имени студентов, используя функцию order :

Результат обработки данных R

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

Заключение

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

  1. сайт http://stackoverflow.com/ (уже подробно разобраны тысячи вопросов по этой теме)
  2. книгу-справочник "R book" by Michael J. Crawley (легко найти бесплатную PDF версию в интернете).

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

kod col.x col.y delta
1 00046949 1,000 1,000 2
2 00047069 3,000 3,000 2
3 00047070 19,000 19,000 2
4 00047071 49,000 49,000 2
5 00047072 21,000 21,000 2
356 CB128164 2,000 2
252 CB164884 1,000 2
Всем привет! Только начал изучать R и столкнулся с некой проблемой: Есть такая волшебная таблица. И задача, вывести в последний столбец разницу 2 и 3 го, и с учетом того что данные в последних строках NA, соответственно вывести в последний столбец NA2 или NA3, в зависимости от того где стоит NA. Проблема в том, что стандартные функции(о которых я еще мало знаю) удаляют строки с NA, а мне важно их сохранить и обработать.
Если у кого то будут мысли по теме, буду рад помощи. Да и еще, у меня типы данных факторы в первых трех столбцах, а последний число.

((ETH1567:0.07723012967,((ETH1478:0.03477412382,ETH1481:0.03998172409)100:0.01982264043,(LAV2470:0.04453502013,LAV2519:0.04666678739) и т.д. без пробелов.

Мне нужно извлечь блоки содержащие буквы и последующие цифры до знака двоеточия, т.е.: ETH1567 ETH1478 ETH1481 LAV2470 LAV2519

Я подобрал регулярку для этого: ([A-z]6*)

treenames <- grep("([A-z]1*)", tree, value = TRUE)

treenames
named character(0)

Перерыд весь stackoverflow и иже с ним, но ответа не нашел.
Буду благодарен за подсказку.

Здравствуйте, Данила! Вот одно из возможных решений Вашей задачи:

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

Отлично, все работает, большое спасибо!

Добрый день!
После преобразования матрицы в таблицу, провожу моделирование.
Выходит такая вещь:
Warning messages:
1: In log(b$y) : NaNs produced
2: In log(b$x1) : NaNs produced
3: In log(b$x2) : NaNs produced
4: In log(b$x4) : NaNs produced
5: In log(b$x5) : NaNs produced
6: In log(b$x6) : NaNs produced

Подскажите, пожалуйста, где ошибка? Голова кипит, не получается(

Доброго дня, Эсмира!

Сегодня все посмотрю и надеюсь смогу помочь ;)

Здравствуйте. Как пропустить заголовок таблицы; учесть, что заголовка нет?

В скобках функции read.table вставьте аргумент header = FALSE.

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

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

gaData <- get_ga(profileId = "resource_id",
start.date = "2019-09-01",
end.date = "2019-10-21",
metrics = "ga:sessions",
dimensions = "ga:date",
samplingLevel = "HIGHER_PRECISION",
max.results = 1000,
token = rga_auth)

Здравствуйте! Сходу ответить не смогу. Сейчас дописываю диссертацию, к сожалению совсем нет свободного времени.

Samoedd приветствую.
Вопрос
После расчетов на экране отображается таблица в таком формате

Qtr1 Qtr2 Qtr3 Qtr4
2000 119.28993 118.89396 118.10201 116.91410
2001 115.33021 114.48457 114.37718 115.00804
2002 116.37716 117.13394 117.27839 116.81051
2003 115.73031 114.20610 112.23790 109.82569
2004 106.96949 105.67921 105.95486 107.79644
2005 111.20394 112.48537 111.64071 108.66998

Сам пробовал искать ответ, но видимо это настолько просто, что об этом ни где не пишут. :-)
Заранее спасибо.

Сентябрь 13, 2019 в 11:55 Samoedd (Автор записи)

Здравствуйте, Alex! Извините, был в отпуске, не смог ответить. Ваш вопрос еще актуален или уже решен?


Я сам изучал R в течение последних нескольких недель.

В своей статье я рассказываю о языке программирования R и его главных концепциях, которые пригодятся каждому исследователю данных.

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

Я очень советую именно R по многим причинам.

R ст а новился всё известнее и известнее, пока не стал одним из самых популярных языков программирования. Его создали статистики (специалисты по статистике) для статистиков. Он хорошо сочетается с другими языками программирования, например с C++, Java, SQL. Более того, его воспринимают как язык, который отлично подходит для работы со статистикой. А в результате большое количество финансовых организаций и крупных вычислительных компаний применяют R в своих исследованиях и разработках.

Python — язык для решения задач общего характера, а R — язык программирования для аналитики.

Этот текст объяснит следующие ключевые области языка R:

  1. Что такое R?
  2. Как установить R?
  3. Где писать код на R?
  4. Что такое R-скрипт и R-пакет?
  5. Какие типы данных есть в R?
  6. Как декларировать переменные и их область действия в R?
  7. Как писать комментарии?
  8. Что такое векторы?
  9. Что такое матрица?
  10. Что собой представляют списки?
  11. Что такое датафреймы?
  12. Различные логические операции в R.
  13. Функции в R.
  14. Циклы в R.
  15. Считывание и запись внешних данных в R.
  16. Как производить статистические вычисления в R.
  17. Построение графиков и диаграмм в R.
  18. Объектно-ориентированное программирование в R.
  19. Знаменитые библиотеки R.
  20. Как установить внешние библиотеки R.

Приступим же!…

Я буду объяснять язык программирования, начиная с основ, в таком стиле, чтобы вам было легче разобраться. Стоит сказать, что ключ к прогрессу в разработке — это постоянная практика. Чем больше, чем лучше.

Этот материал должен стать целостной базой для вас — читателей.

  • R — это бесплатный язык программирования с лицензией GNU. В сущности R — это статистическая среда.
  • R в основном используется для статистических вычислений. Он имеет набор алгоритмов, которые углубленно применяются в области машинного обучения. А конкретнее — в анализе временных рядов, классификации, кластеризации, линейном моделировании и т.д.
  • Также R — это среда, в которой есть набор программных пакетов, с которыми можно производить вычисления для построения диаграмм и для манипуляций с данными.
  • R значительно применяется в проектах статистических исследований.
  • R очень похож на другой язык программирования — S.
  • R компилируется и запускается на UNIX, Windows, MacOS, FreeBSD и Linux.
  • В R есть большое количество структур данных, операторов и параметров. Он включает многое: от массивов до матриц, от циклов до рекурсии вместе с интеграцией с другими ЯП, например с C, C++ и Fortran.
  • C можно использовать для обновления объектов в R напрямую.
  • R можно дополнять новыми пакетами.
  • R — интерпретатор.
  • Авторы R вдохновлялись S+, так что, если вы знакомы с S, изучение R будет для вас простым следующим шагом.

Преимущества R:

Вдобавок к плюсам, о которых я написал выше:

  • R просто выучить.
  • В среде есть очень много бесплатных пакетов с открытым исходным кодом для статистики, аналитики и графики.
  • Богатство различных научных трудов вместе с их применением в R в вашем распоряжении.
  • Лучшие мировые университеты учат своих студентов R, следовательно, он стал принятым стандартом, продолжит расти и развиваться.
  • Широкие возможности интеграции с другими языками.
  • Огромная поддержка в сообществе специалистов.

Ограничения R:

Также есть и некоторые ограничения:

  • R не такой быстрый, как C++. К тому же, есть проблемы с его защищённостью и управлением памятью.
  • R имеет много пространств имен. Иногда такое впечатление, что их даже слишком много. Тем не менее ситуация улучшается.
  • Так как R — это статистический язык, то он не такой интуитивный, как Python, и в нём не так просто работать с ООП, как в Python.

А теперь я представлю вам язык R в формате кратких описательных разделов.

Можете установить R на эти платформы:

Первый шаг — загрузите R:

Вот вам и линки:

Есть разные графические интерфейсы. Очень советую R-Studio.


Загрузите десктопную версию RStudio:

Если вы работаете на Windows, в процессе установки R Studio по умолчанию попадет сюда:

Это два ключевых компонента в языке. В этом разделе поверхностно расскажу о концепциях.

Пакет R

Так как R — это ЯП с открытым кодом, важно понимать, что тут подразумевается под пакетом. Пакет в сущности группирует и упорядочивает код, а также другие функции. Пакет — это библиотека, в которой содержится большое количество файлов.

Специалисты по данным могут писать и делиться своим кодом с другими. Будь это их собственный код с нуля или расширение пакетов других авторов. Пакеты позволяют специалистам по данным переиспользовать код и распространять его среди остальных.

Пакеты созданы, чтобы контейнировать функции и наборы данных.

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

В интернете в открытом доступе есть десятки тысяч пакетов R. Эти пакеты собраны в центральном репозитории. Вообще есть разные репозитории. Это и CRAN, и Bioconductor, и любимый Github.

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

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

Чтобы загрузить пакет, напечатайте:

Чтобы пользоваться функциональностью пакета, напишите в его имени::название функции.

Например, если мы хотим применить функцию “AdBCDOne” из пакета “carat”, можем сделать следующее:

R Script

Скрипт R — это место, где специалист по данным может писать статистический код. Это текстовый файл с расширением .R, например мы может назвать скрипт tutorial.R.

Можем создать много скриптов в пакете.

В качестве примера, если вы создали два скрипта R:

  1. blog.R (для блога)
  2. publication.R (для публикации)

И если вы хотите вызвать функции publication.R в blog.R, то вам стоит пользоваться командой source(“target R script”). Она импортирует publication.R в blog.R:

Создаём пакет скрипта

Процесс относительно простой. В сущности вот, что нужно сделать:

  1. Создайте файл описания.
  2. Создайте R.scripts и добавьте любые датасеты, документацию, тесты, которые должны быть в этом пакете.
  3. Напишите свои функции в скриптах R.
  4. Можем применить devtools и roxygen2, чтобы создать пакеты R с помощью такой команды:

Очень важно разобраться в разных типах данных и структурах в R. Так вы сможете пользоваться языком эффективно. В этом разделе я опишу концепции.

Типы данных

Вот базовые типы данных в R:

  1. символ (character): может быть таким “abc” или таким “a”
  2. целочисленный (integer): например 5L
  3. числовой (numeric): например 10.5
  4. логический (logical): TRUE или FALSE
  5. комплексный (complex): например 5+4i

Ещё можем пользоваться командой typeof(variable), чтобы определить тип переменной.

Чтобы найти метаданные (атрибуты типа), используйте команду attributes(variable).

Структуры данных

В R достаточно много структур данных. Привожу самые важные:

  1. Вектор (vector): самая важная структура, которая в сущности является набором элементов.
  2. Матрица (matrix): похожая на таблицу структура со строками и колонками
  3. Датафрейм (data frame): табличная структура для статистических операций
  4. Списки (lists): набор, в котором может быть комбинация типов данных.
  5. Факторы (factors): для представления категориальных данных.

Я расскажу обо всех этих типах и структурах данных, так что начинаем строить фундамент.

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

Переменная нужна, чтобы сохранять значение, которое может меняться в вашем коде.

Чтобы понять, важно запомнить, что такое окружение в R. В сущности окружение — это место, где хранятся переменные. Это набор пар, где первый элемент — это символ (переменная), а второй — её значение.

Окружение имеет иерархическую структуру (похожую на дерево). Следовательно, окружение может иметь родителя и множество дочерних ответвлений. Корневое окружение — это окружение без родителя.

Надо декларировать переменную и присвоить ей значение при помощи следующего:

После этого значение “my variable” будет присвоено переменной x. Функция print() выведет значение x, которое равно “my variable”.

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

Чтобы создать набор целых чисел, мы можем сделать следующее:

1 — первое значение, а 5 — последнее значение из набора.

В результате выведутся числа от 1 до 5.

Помните, что IDE R-Studio отслеживает переменные:


Функцию ls() можно писать, чтобы показать переменные и функции в текущем окружении.

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

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

Можем добавить комментарий одной строкой:

Можем добавить комментарий в несколько строк при помощи двойных кавычек:

Памятка: в R-Studio выделите код, который вы собираетесь закомментировать и нажмите сочетание клавиш Ctrl+Shift+C.

Так вы автоматически сделаете нужную часть программы комментарием.

Вектор считается одной из самых важных структур данных в R. В сущности вектор представляет собой набор элементов, где у всех элементов должен быть одинаковый тип данных: например, только логический (истинно/ложно — TRUE/FALSE), числовой, знаковый.

Также можем создать пустой вектор:

По умолчанию тип вектора логический. По команде ниже выведется слово “logical”, так как это и есть тип данных вектора:

Чтобы создать вектор со своими элементами, пишите функцию конкатенации (объединения строк):

Результат выполнения этого кода будет таким:

[1] “Farhad”
[2] “Malik”
[3] “FinTechExplained”

Если мы захотим найти длину вектора, можем воспользоваться функцией length():

Результат вывода строки выше будет 3. Потому что в заданном векторе x 3 элемента. Чтобы добавить элементы в вектор, можем комбинировать элемент с вектором.

Например, чтобы добавить слово “world” к началу вектора с одним элементом слова “hello”, нужно написать так:

В результате напечатается “world” “hello”.

Если мы смешиваем типы элементов, то R в свою очередь будет приспосабливать тип вектора в ответ на это. Тип вектора (режим) будет становиться таким, каким должен быть по своему расчёту, чтобы подходить этому вектору:

И хотя второй элемент имеет логическое значение, тип будет выведен как “character” (символ).

Над векторами можно производить операции.

Для примера, вот вам умножение скаляра на вектор:

В результате напечатается 2,4,6.

Также можем сложить два вектора:

Результат будет: 5 7 9

Если векторы — это знаки и мы хотим сложить их вместе, то:

Error in x + y : non-numeric argument to binary operator (ошибка в выражении x + y: нечисловой аргумент для бинарного оператора).

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