В предыдущих сообщениях было рассмотрено как, работая непосредственно в системе R, можно создать небольшие по объему объекты для хранения данных (векторы, матрицы, списки, таблицы данных). Однако возможности системы R по вводу и редактированию данных умышленно ограничены ее создателями, которые предполагали, что для этого будут использоваться другие средства (например, программа Microsoft Excel). Поэтому подлежащие анализу объемные таблицы данных обычно подготавливаются при помощи сторонних приложений, и только потом загружаются в рабочую среду R из внешних файлов. Хотя предпочтение при этом отдается текстовым файлам, с сайта CRAN можно скачать специальную библиотеку foreign, функции которой позволяют импортировать таблицы, сохраненные во множестве других распространенных форматов (Excel, SPSS, SAS, STATA, Acces, Matlab, SQL, Oracle, и т.п.; см. также руководство R Data Import/Export).

Импортирование данных в систему R часто вызывает проблемы у тех, кто только начинает работать с этой программой. Но ничего сложного в этом нет. Ниже будут подробно рассмотрены наиболее распространенные способы импорта таблиц данных в рабочую среду R, однако сначала ознакомимся с правилами подготовки загружаемых файлов:
  • В импортируемой таблице с данными не должно быть пустых ячеек. Если некоторые значения по тем или иным причинам отсутствуют, вместо них следует ввести NA.
  • Импортируемую таблицу с данными рекомендуется преобразовать в простой текстовый файл с одним из допустимых расширений. На практике обычно используются файлы с расширением .txt, в которых значения переменных разделены знаками табуляции (tab-delimited files), а также файлы с расширением .csv (comma separated values), в которых значения переменных разделены запятыми.
  • В качестве первой строки в импортируемой таблице рекомендуется ввести заголовки столбцов-переменных. Такая строка – удобный, но не обязательный элемент загружаемого файла. Если она отсутствует, то об этом необходимо сообщить в описании команды, которая будет управлять загрузкой файла (например, read.table() – см. ниже). Все последующие строки файла в качестве первого элемента содержат заголовки строк (если таковые предусмотрены), после которых следуют значения каждой из имеющихся в таблице переменных. В именах столбцов таблицы не допускается наличие пробелов. Кроме того, имена столбцов (так же как и имена строк) не должны начинаться с точки или чисел. Во избежание связанных с кодировкой проблем все текстовые величины в импортируемых файлах рекомендуется создавать с использованием букв латинского алфавита.
  • Подлежащий импортированию файл рекомендуется поместить в т.н. рабочую папку программы, т.е. папку, в которой R по умолчанию будет "пытаться" найти этот файл. Чтобы выяснить путь к рабочей папке R на своем компьютере используйте команду getwd() (get working directory – узнать рабочую директорию); например:

    getwd()
    [1] "C:/Temp/"

    Изменить рабочую директорию можно при помощи команды setwd() (set working directory – создать рабочую директорию):

    setwd("C:/My Documents")
     
    # при выполнении приведенной команды внешне ничего не произойдет,
    # однако последующее применение команды getwd() покажет,
    # что путь к рабочей папке изменился:
     
    getwd()
    [1] "C:/My Documents/"
    

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


Group
Variable1
Variable2
Variable3
Ivan
A
102
1.3
14
Vitaliy
A
98
1.4
11
Sergey
B
45
NA
8
Mikhail
B
50
3.2
6


Как видим, приведенный фрагмент имеет размерность 5х5, т.е. состоит из пяти строк и пяти столбцов. В первой строке представлены заголовки всех имеющихся в таблице столбцов, за исключением первого. Первый столбец, хотя и не имеет собственного заголовка, не является пустым – он содержит имена добровольцев, участвовавших в некотором эксперименте (Ivan, Vitaliy, и т.д.). Второй столбец имеет заголовок Group и содержит метки, по которым можно выяснить принадлежность испытуемых к той или иной экспериментальной группе (A, B, и т.д.). В терминах языка R переменная Group называется фактором. В последующих столбцах (с заголовками Variable1, Variable2, и т.д.) содержатся значения измеренных в ходе исследования переменных. В приведенном фрагменте таблицы имеется одно отсутствующее значение, вместо которого введено NA.

Пожалуй, одним из наиболее доступных и удобных средств подготовки данных для их последующего анализа при помощи R, является программа Microsoft Excel. Для сохранения Excel-таблиц в виде txt- или csv-файлов используйте опцию Сохранить как (Save as) в разделе Файл (File) главного меню этой программы.

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

Аргумент
Назначение
file
Служит для указания пути к импортируемому файлу. Путь приводят либо в абсолютном виде (например, file = "C:/Temp/MyData.dat"), либо указывают только имя импортируемого файла (например, file = "MyData.txt"), но при условии, что последний хранится в рабочей папке программы (см. выше). В качестве имени можно также указывать полную URL-ссылку на файл, который предполагается загрузить из Internet (например: file = "http://somesite.net/YourData.csv"). Начиная с версии R 2.10, появилась возможность импортировать архивированные файлы в zip-формате.
header
Служит для сообщения программе о наличии в загружаемом файле строки с заголовками столбцов. По умолчанию принимает значение FALSE. Если строка с заголовками столбцов имеется, этому аргументу следует присвоить значение TRUE.
row.names
Служит для указания номера столбца, в котором содержатся имена строк (например, в рассмотренном выше примере это был первый столбец, поэтому row.names = 1). Важно помнить, что все имена строк должны быть уникальными, т.е. одинаковые имена для двух или более строк не допускаются.
sep
Служит для указания используемого в файле разделителя значений переменных (separator – разделитель). По умолчанию предполагается, что значения переменных разделены "пустым пространством", например, в виде пробела или знака табуляции (sep = ""). В файлах формата csv значения переменных разделены запятыми, и поэтому для них sep = ",".
dec
Служит для указания знака, используемого в файле для отделения целой части числа от дроби. По умолчанию sep = ".". Однако во многих странах в качестве десятичного знака применяют запятую, о чем важно вспомнить перед загрузкой файла и, при необходимости, использовать dec = ",".
nrows
Выражается целым числом, указывающим количество строк, которое должно быть считано из загружаемой таблицы. Отрицательные и иные значения игнорируются. Пример: nrows = 100.
skip
Выражается целым числом, указывающим количество строк в файле, которое должно быть пропущено перед началом импортирования. Пример: skip = 5
 

Для загрузки тщательно подготовленных файлов (см. правила выше) достаточно использовать минимальный набор аргументов функции read.table(). В качестве примера предположим, что нам необходимо загрузить файл hydro_chem.txt, который хранится в рабочей папке R и содержит данные по химическому составу воды некоторого водоема. Загружаемую таблицу данных мы намерены сохранить в виде объекта с именем chem. Функция read.table() в этом случае может быть применена следующим образом:
chem <- read.table(file = "hydro_chem.txt", header = TRUE)

Как отмечено выше, импортируемые в R файлы часто имеют формат csv. Для их загрузки можно воспользоваться той же функцией read.table(), но при этом следует указать, что в качестве разделителя значений переменных в файле используется запятая:
chem <- read.table(file = "hydro_chem.csv", header = TRUE, sep = ",")

Аналогом read.table() для загрузки csv-файлов является функция read.csv():

chem <- read.csv(file = "hydro_chem.csv", header = TRUE)

Если подлежащий загрузке файл хранится в папке, отличной от рабочей папки R, то следует указать полный путь к нему. При этом пользователям операционных систем Windows необходимо помнить, что для указания полных путей к файлам в программе R используется не обратный одинарный слэш (\), а прямой одинарный (/) либо двойной обратный слеш (\\). Например, следующие две команды будут успешно восприняты R и приведут к идентичному результату – загрузке файла hydro_chem.txt и сохранению его в виде объекта chem:

chem <- read.csv(file = "D:\\Documents\\hydrochem.txt", header = TRUE)
 
chem <- read.csv(file = "D:/Documents/hydrochem.txt", header = TRUE)

Для интерактивного выбора загружаемого файла, который хранится вне рабочей папки R, можно применить вспомогательную функцию file.choose() (выбрать файл). Выполнение этой команды приводит к открытию обычного диалогового окна операционной системы Windows, в котором пользователь выбирает папку с необходимым файлом. Очень удобно совмещать file.choose() с командами read.table() или read.csv(), например:
chem <- read.table(file = file.choose(), header = TRUE, sep = ",")

9 Комментарии

Unknown написал(а)…
Спасибо огромное, ребята!
Анонимный написал(а)…
Да, спасибо!
vaksa1212 написал(а)…
Самое лучшее объяснение из тех, что удалось найти!
Unknown написал(а)…
спасибо вам!
Анонимный написал(а)…
Спасибо. То, что нужно для начала.
Анонимный написал(а)…
спасибо! очень понятно и то, что нужно.
Так помогает.
Владимир написал(а)…
Большое спасибо за то, что делитесь своим опытом с новичками!
Костя написал(а)…
Спасибо! Хорошая статья.
В пояснении к dec опечатка sep = "."
Unknown написал(а)…
Большое спасибо! Почему-то этот вопрос игнорируется в руководствах по R.
Например, читаю я R-data import export manual.
По логике они должны бы в первой строчке написать про рабочую директорию.
Но почему-то они об этом НИЧЕГО НЕ ПИШУТ. Специально???
Новые Старые