Как загрузить свои данные в среду R

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

Правильная структура таблицы - залог успеха!

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

Как видно на рисунке ниже наша «таблица данных» имеет ряд структурных ошибок.

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

Неоднородность таблицы данныхВо-вторых, в некоторых столбцах мы имеем неоднородность данных. Например, в «Weight» и «Blood group» часть данных отображена числами, а часть словами. Всегда приводите данные одного столбца к одному формату. То же самое касается и «Rhesus factor». Также убедитесь, что в Excel листе нет заполненных ячеек , находящихся за пределами созданной таблицы. В итоге, результат должен получиться такой же, как на рисунке ниже.

Таблица Excel для R

Загрузка данных в среду R напрямую из Excel таблиц

Итак, теперь наша таблица имеет правильную структуру. Для загрузки файлов в форматах программы Excel (.xsl или .xlsx) существует R-пакет "xlsx", который позволяет загружать их без особых проблем.

Сначала загружаем пакет "xlsx" в среду R:
> install.packages("xlsx", dep = T)

Подключаем этот пакет при помощи команды:
> library("xlsx")

Потом прописываем путь и имя файла, указываем номер листа, в котором находится таблица:
> имя таблицы в R <- read.xlsx("путь к файлу/имя файла.xlsx", sheetIndex = "номер листа")

В нашем случае имя файла "voenvuz.xlsx", а имя таблицы данных в среде R - "voenvuz1":
> voenvuz <- read.xlsx("D:/Samoedd.com/Статьи/05 Загрузка данных в R/Students2.xlsx", sheetIndex = 1)

Проверим, все ли нормально со структурой таблицы, вызвав имя таблицы "voenvuz1" в командной строке:


Таблица данных в RВсе готово, наша таблица загружена корректно в среду R. Но прежде чем перейти к анализу загруженных данных, следует также освоить другой, более популярный среди опытных пользователей R метод загрузки данных — импортирование .txt и .csv файлов. В своей работе я использую именно его!

Классический вариант: импорт таблиц форматов .txt или .csv в среду R

Есть по крайней мере три причины, почему большинство пользователей R предпочитают пользоваться именно этим вариантом. Во-первых, не нужно подключать в R никаких дополнительных пакетов. Во-вторых, множество «сырых» данных сохраняется именно в форматах .txt и .csv. В третьих, эти форматы меньше весят в сравнении с тяжелыми .xls и .xlsx, и в них нет никаких ограничений по количеству строк или столбцов. Другими словами, они универсальны.

Создадим файлы voenvuz.txt и voenvuz.csv прямо в программе Excel. Для этого проделаем следующее:

  1. Нажимаем на вкладку «Файл» в левом верхнем углу;
  2. Выбираем «Экспорт» и находим опцию «Изменить тип файла»;
  3. Кликаем на нее и видим перед собой список различных форматов;
  4. Выбираем .txt (разделитель — знак табуляцией ‘tab’) или .csv (разделитель — запятая);
  5. Прописываем расположение и имя файла.

Теперь необходимо лишь импортировать полученные файлы в среду R. Для этого воспользуемся командами:
для .csv:
> voenvuz2 <- read.csv("D:/Samoedd.com/Статьи/05 Загрузка данных в R/voenvuz.csv", sep = ";")

для .txt:
> voenvuz3 <- read.table("D:/Samoedd.com/Статьи/05 Загрузка данных в R/voenvuz.txt", sep = "\t")

Несмотря на то, что мы загружали данные из разных форматов (.xlsx, .csv, .txt), результат должен получиться одним и тем же. Именно поэтому в среде R у нас появилось три абсолютно одинаковых таблицы под именами "voenvuz1", "voenvuz2", "voenvuz3".

Полезная информация, небольшой трюк и заключение...

Чтобы быстро и эффективно загружать свои данные в среду R важно понимать, что такое «рабочая директория». Говоря простыми словами — это папка (директория), где расположен исполняемый файл программы. Для того, чтобы узнать рабочую папку R, следует набрать команду:
> getwd()

Файлы, расположенные в этой папке, не нуждаются в указании «пути к файлу» при загрузке в среду R, что существенно экономит время, и уменьшает количество букв в коде. Именно поэтому важно не только знать, но и уметь изменять расположение рабочей папки. Измените расположение рабочей директории R на ту папку, в которой Вы разместили файлы voenvuz.xlsxvoenvuz.csvvoenvuz.txt.
> setwd("D:/Samoedd.com/Статьи/05 Загрузка данных в R")

Теперь Вы можете загрузить любую из таблиц, используя гораздо более короткий код, например:
> voenvuz4 <- read.table("voenvuz.txt", sep = "\t")

Трюк с ярлыком R

Рабочая папка R

Есть способ, при котором не нужно прописывать путь рабочей директории в R консоли, он будет создан автоматически. Для этого надо кликнуть по ярлыку программы R правой кнопкой и выбрать «Свойства». Во вкладке ярлык Вы увидите окошко «Рабочая папка». Удалите все, что там написано, чтобы оно было пустым, и нажмите «Применить».

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

И напоследок, пара советов...

  1. Если по каким-то причинам, таблица загрузилась в среду R неправильно, обратите внимание на аргументы функции read.table(). Возможно, стоит вручную прописать разделитель столбцов (sep = «») и десятичный знак (dec = «»). Аргумент header = TRUE, говорит о том, что у Вас в таблице присутствует заголовок для столбцов. Если его нет, замените на header = FALSE. Больше справочной информации об аргументах вы найдете, написав в консоли ?read.table
    В качестве примера, я прописал некоторые аргументы для импорта нашей «voenvuz.txt» таблицы:
    > voenvuz5 <- read.table("voenvuz.txt", header = TRUE, sep = "\t", dec = ".")
  2. Если Ваш путь к таблице данных прописан на кириллице, то при вводе кода в консоль, убедитесь, что у Вас стоит английская раскладка. В противном случае, Вы увидите ошибку, проиллюстрированную ниже.

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

Комментарии: 41
  1. Денис

    Здравствуйте, почему R все названия колонок и значения строк выдает вместе в одной колонке, хотя их три?

    1. Samoedd (Автор записи)
      https://samoedd.com

      Здравствуйте, Денис! Скорее всего ошибка в выборе разделителя столбцов (проверьте значение аргумента sep). Если нет, проверьте расширение файла, который Вы пытаетесь загрузить: если это .csv файл, используйте функцию read.csv(); если .txt — read.table(); excel — read.xlsx().

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

      1. Денис

        Спасибо за ответ! Для загрузки использую код x <- read.csv("data1.csv", header = TRUE, sep=""). Загружаю это файл https://yadi.sk/i/KWqB0CAauTrDoQ

      2. Samoedd (Автор записи)
        https://samoedd.com

        Проблема в некорректном значении аргумента sep. Самый простой способ узнать разделитель столбцов — открыть файл в текстовом редакторе (например Блокнот, но если придется кодить на регулярной основе, присмотритесь к более продвинутому редактору — NotePad++).

        В любом случае, открыв этот файл в текстовом редакторе, Вы увидите, что между значениями в строках стоит точка с запятой. Ту же точку с запятой Вы видите, когда некорректно загружаете файл в консоли R. Поэтому решение простое — вставьте в аргумент sep «;» и все заработает:

        x < - read.csv("data1.csv", header = TRUE, sep=";")

        Если возникнут другие сложности с R пишите в комментариях к соответствующим статьям. Я буду рад Вам помочь.

  2. Tatiana

    Здравствуйте, спасибо за статью! Скажите, пожалуйста, как быть.
    У меня таблица csv с большим объемом данных, причем в некоторых ячейках есть фразы, естественно между словами фразы есть пробел. Так вот R импортирует эти слова из одной ячейки в разные ячейки, то есть, думает, что это относится к разным столбцам. Как быть, если данные не только цифровые и описаны не только одним словом в ячейке?

    1. Samoedd (Автор записи)
      https://samoedd.com

      Здравствуйте, Татьяна!

      Верно ли я понимаю, что разделителем между столбцами также является пробел? Если да, то смело откройте таблицу в Excel и экспортируйте в csv, где разделитель будет запятой., либо в txt с разделителем (точка с запятой), чтобы избежать подобной проблемы с возможными запятыми внутри ячеек таблицы.

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

  3. Анна

    Ошибка в read.table(file = file, header = header, sep = sep, quote = quote, :
    больше колонок, чем имен для них
    Что делать?

    1. Samoedd (Автор записи)
      https://samoedd.com

      Напишите какую команду (код) Вы отправляли в R, а также расширение загружаемой таблицы (txt, csv или xls)?

      1. Анна

        csv
        LoanStats_2016Q1<-read.csv("D:/Диплом/Данные/LoanStats_2016Q1.csv",sep=",")
        эту строку вбивала

      2. Samoedd (Автор записи)
        https://samoedd.com

        Попробуйте вот эти три варианта:
        read.csv(«D:/Диплом/Данные/LoanStats_2016Q1.csv», row.names=NULL)
        read.csv2(«D:/Диплом/Данные/LoanStats_2016Q1.csv», row.names=NULL)
        read.csv(«D:/Диплом/Данные/LoanStats_2016Q1.csv», header=F, row.names=NULL)

        Если ни один из вариантов не сработает, пришлите мне на email Ваш файл, я устраню проблему.

      3. Анна

        Пишет, что неожиданный ввод

      4. Samoedd (Автор записи)
        https://samoedd.com

        Странно, пишлите мне на почту свой файл, без него никуда видимо:-)

  4. Ирина

    Здравствуйте! У меня такая ошибка:
    Error in open.xlsx(«C:/Users/user/voenvuz.xlsx») :
    could not find function «open.xlsx»

    1. Samoedd (Автор записи)
      https://samoedd.com

      Используйте функцию read.xlsx и все заработает.

  5. Надежда

    Ошибка в команде > library(«xlsx») не грузит пакет rjava
    > install.packages(«xlsx», dep = T)
    — Пожалуйста, выберите зеркало CRAN для использования в этой сессии —
    пробую URL ‘https://cloud.r-project.org/bin/windows/contrib/3.4/xlsx_0.5.7.zip’
    Content type ‘application/zip’ length 401236 bytes (391 KB)
    downloaded 391 KB

    пакет ‘xlsx’ успешно распакован, MD5-суммы проверены

    Скачанные бинарные пакеты находятся в
    C:\Users\FEED-PRO\AppData\Local\Temp\RtmpYxTZ9o\downloaded_packages
    > library(«xlsx»)
    Загрузка требуемого пакета: rJava
    Error: package or namespace load failed for ‘rJava’:
    .onLoad не удалось в loadNamespace() для ‘rJava’, подробности:
    вызов: fun(libname, pkgname)
    ошибка: JAVA_HOME cannot be determined from the Registry
    Ошибка: пакет ‘rJava’ нельзя загрузить
    > install.packages(«rJava», dep = T)
    пробую URL ‘https://cloud.r-project.org/bin/windows/contrib/3.4/rJava_0.9-9.zip’
    Content type ‘application/zip’ length 720033 bytes (703 KB)
    downloaded 703 KB

    пакет ‘rJava’ успешно распакован, MD5-суммы проверены

    Скачанные бинарные пакеты находятся в
    C:\Users\FEED-PRO\AppData\Local\Temp\RtmpYxTZ9o\downloaded_packages
    > library(«xlsx»)
    Загрузка требуемого пакета: rJava
    Error: package or namespace load failed for ‘rJava’:
    .onLoad не удалось в loadNamespace() для ‘rJava’, подробности:
    вызов: fun(libname, pkgname)
    ошибка: JAVA_HOME cannot be determined from the Registry
    Ошибка: пакет ‘rJava’ нельзя загрузить

    1. Samoedd (Автор записи)
      https://samoedd.com

      Здравствуйте, Надежда!

      R не может найти путь к Java. Вы установили Java на компьютер?

      Если работаете с macOS, то Терминал и введите команду:
      sudo ln -s $(/usr/libexec/java_home)/jre/lib/server/libjvm.dylib /usr/local/lib

      1. Надежда

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

      2. Samoedd (Автор записи)
        https://samoedd.com

        Мне нужно больше информации, чтобы помочь Вам. Напишите что у Вас за ОС, 32 или 64 бит, Rgui или RStudio или Терминал, версия R и какой код вводите в консоль. Желательно еще ссылку на скрин.

  6. Огнерубов Дмитрий Викторович

    voenvuz<-read.xlsx("C:/Users/Дима/Documents/data/voenvus.xlsx",sheetlndex=1)
    Ошибка в read.xlsx("C:/Users/Дима/Documents/data/voenvus.xlsx", sheetlndex = 1) :
    Please provide a sheet name OR a sheet index.

  7. Эсмира

    Спасибо, попробую так. Это удобней. Правда я по другому научилась загружать в R. Сохраняю как блокнот и потом загружаю.

  8. Alyona

    Здравствуйте! У меня возникли проблемы на этапе установки пакета. Подскажите, пожалуйста, что делать в этом случае:

    install.packages(«xlsx»)
    Warning in install.packages :
    ‘lib = «C:/Program Files/R/R-3.4.3/library»‘ is not writable
    Warning in install.packages :
    cannot create dir ‘C:\Users\??????’, reason ‘Invalid argument’
    Error in install.packages : unable to create ‘C:/Users/??????/Documents/R/win-library/3.4’

    1. Samoedd (Автор записи)
      https://samoedd.com

      Здравствуйте, Алена!

      Для того, чтобы я Вам помог, ответьте на три вопроса:
      1) Вы используете свой личный компьютер или рабочий?
      2) Вы используете RGui или RStudio?
      3) На какой системе Вы запускаете программу: Windows, MacOS или Linux?

      1. Alyona

        1) Я использую личный компьютер
        2) RStudio
        3) Windows

      2. Samoedd (Автор записи)
        https://samoedd.com

        Запустите RStudio как администратор. Для этого кликните на иконку программы правой кнопкой мыши, и выберете в списке «Запуск от имени администратора». Все должно заработать. В противном случае, попробуйте воспользоваться советом номер 2 в конце данной статьи.

  9. Анна

    Добрый день.

    > library(xlsx)
    > distrib_data<-read_excel(file.choose(),sheet = 1)
    Error in read_excel(file.choose(), sheet = 1) :
    could not find function "read_excel"

    Что с этим делать?

    1. Samoedd
      https://samoedd.com

      Добрый день,

      Скорее всего Вы используете несуществующую функцию (перепутали название). Замените read_excel на read.xlsx, все должно заработать.

  10. Динара

    большое спасибо, все получилось)

  11. Елена

    Добрый день! В чем может быть ошибка если в загрузке данных в среду R напрямую из Excel таблиц на этапе указания пути и имени файла выдается ошибка: не могу найти функцию «read.xlsx»?

    1. Samoedd (Автор записи)
      https://samoedd.com

      Здравствуйте, Елена!

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

      1. Елена

        На команду library выдается ошибка:
        Загрузка требуемого пакета: rJava
        Error: package or namespace load failed for ‘rJava’:
        .onLoad не удалось в loadNamespace() для ‘rJava’, подробности:
        вызов: fun(libname, pkgname)
        ошибка: JAVA_HOME cannot be determined from the Registry
        Ошибка: пакет ‘rJava’ нельзя загрузить

        Сам пакет rJava я уже отдельно успешно распаковывала в среде R.

      2. Samoedd (Автор записи)
        https://samoedd.com

        Есть ли у Вас не установлена Java на компьютере, то установите ее, используя эту ссылку.

        Затем, установите JDK (Java Development Kit) на Ваш компьютер, не изменяя стандартных параметров установки.

        И теперь снова попробуйте установить пакет xlsx.
        Надеюсь, что этот рецепт поможет Вам решить сложившуюся проблему :-)

  12. Мария

    Опять я. Если же использовать классический способ, и пересохранить excel в
    csv или txt, то русский шрифт выглядит нормально, но тогда в R почему-то пустые ячейки не заполняются значениями NA (при большом объеме реальных данных, притом что в Вашем примере в файле voenvuz, если в нем удалить часть данных, всё отлично заполняется NA значениями)… Не пойму, в чем дело((

    1. Samoedd (Автор записи)
      https://samoedd.com

      В данном случае следует ввести дополнительный параметр na.strings:
      read.table("mydata.csv", header = T, na.strings="")

  13. Мария

    Здравствуйте! Спасибо за полезную статью!
    Но у меня проблема.
    Подскажите, пожалуйста, что делать, если в excel-таблице есть данные на русском языке (и их много). В импортированной таблице в R в таких строках они отображаются в каком-то диком виде. Пробовала file->save with encoding->выбирала другие кодировки, ничего не выходит..

    1. Samoedd (Автор записи)
      https://samoedd.com

      Здравствуйте, Мария!

      После адреса файла введите дополнительный параметр — encoding. Например:
      read.table(file("данные.txt", encoding = "UTF-8"), header = T)

      P.S. Извините за поздний ответ, был в отпуске.

  14. Эсмира

    Спасибо большое! Но у меня вопрос.Дело в том, что экспортировалась таблица в кривом виде и вместе с пустыми ячейками после таблицы, которые обозначились как NA. Как сделать так, чтобы импортировались только данные? Может изначально excel файл подготовить для R. Если да. то как? Спасибо!

    1. Samoedd (Автор записи)
      https://samoedd.com

      Здравствуйте ! Пришлите мне пожалуйста Вашу таблицу и команду, которую Вы отправляете в R для загрузки своей таблицы на e-mail: sergey@samoedd.com
      Я постараюсь помочь.

  15. Almira

    спасибо!!!

  16. Александр

    автор спс

  17. seoonly

    Спасибо, все получилось-)

    1. Samoedd (Автор записи)
      https://samoedd.com/

      Всегда пожалуйста!

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *