Чтение данных из текстового файла
R может читать данные, сохраненные в текстовом (ASCII) файле. Для этого используются три функции: read.table() (которая имеет два варианта: read.csv() и read.csv2()), scan() и read.fwf().
Например, если мы имеем файл data.dat, то для того чтобы его прочитать можно набрать:
> mydata <-read.table ("data.dat")
mydata тогда будет объектом вида data.frame, и каждая переменная будет называться, по умолчанию, V1, V2... и к ним можно обратиться индивидуально mydata$V1, mydata$V2..., или mydata["V1"], mydata["V2"]..., или mydata[,1], mydata[,2], …
Однако, есть различия: mydata$V1 и mydata[,1] – векторы, тогда как mydata["V1"] - data.frame.
У функции read.table() есть несколько параметров:
read.table(файл, header=FALSE, sep = "", quote = "\"’", dec = ".", row.names =, col.names =, as.is=FALSE, na.strings = "NA", skip=0, fill = ! blank.lines.skip, check.names=TRUE, strip.white=FALSE, blank.lines.skip = TRUE)
Параметры:
файл | название файла пишется (в кавычках " "), можно использоваться путь (символ \ не допустим, и должен быть заменен на /). |
header | логический (ЛОЖЬ или ИСТИНА) указывает, содержит ли файл названия переменных в начале строки. |
sep | разделитель полей используемый в файле, например sep = "\t", если это - табуляция. |
quote | символы, используемые для обозначения переменных символьного типа. |
dec | символ, используемый для отделения дробной части числа. |
row.names | вектор с названиями строк, которые могут быть векторами символьного типа, или числового (или название) переменной файла (по умолчанию: 1, 2, 3...). |
col.names | вектор с названиями колонок (по умолчанию: V1, V2, V3...). |
as.is | указывает преобразовать символьных значения в факторы (если ЛОЖЬ) или сохраняет их как символы (ИСТИНА). |
na.strings | показывает какое значение строки считать отсутствием данным (по умолчанию - NA). Пустое значение в числовой колонке тоже считается отсутствием данных. |
skip | число строк, которые будут пропущены перед чтением данных |
fill = TRUE | если в файле все поля заполнены. |
check.names | если ИСТИНА, то проверяется, допустимость имен переменных для R |
strip.white | (условное выражение к sep ), если ИСТИНА, то удаляются дополнительные пробелы до и после символьных переменных |
blank.lines.skip | Если имеет значение TRUE то пустые строки в файле игнорируются по умолчанию параметр имеет значение TRUE Мы можем изменить значение на FALSE, которое используется совместно с параметром fill = TRUE |
Для ввода из файлов имеющих определенный формат используются команды read.csv и read.csv2 которые имеют следующие значения по умолчанию:
read.csv (файл, header = ИСТИНА, sep =,"", quote = " \ "", dec = ". "...)
read.csv2 (файл, header = ИСТИНА, sep = ";", quote = " \ "", dec = ", "...)
Функция scan() более гибкая, чем read.table() и имеет больше параметров. Главное отличие в том, что, при вводе можно указать тип переменных, например:
> mydata <-scan("data.dat", what=list (" ", 0,0))
в файле data.dat три переменные, первая имеет символьный тип и следующие две - числовой тип.
Формат scan()следующий:
> scan (file = "", what=double(0), nmax=-1, n=-1, sep="", quote=if(sep == "\n") " " else " ’ \ "", dec = ". ", skip=0, nlines=0, na.strings = "NA", flush=FALSE, strip.white=FALSE, quiet=FALSE)
Параметры:
file | название файла пишется (в кавычках " "), можно использоваться путь (символ \ не допустим, и должен быть заменен на /), если file = " ", то данные вводят с клавиатуры . |
what | определяет типы данных |
nmax | количество читаемых данных, или, если what описывает список, количество читаемых строк (по умолчанию, scan читает данные до конца файла) |
n | количество читаемых данных, (по умолчанию все) |
sep | разделитель полей используемый в файле |
quote | символы, используемые для обозначения переменных символьного типа |
dec | символ, используемый для отделения дробной части числа. |
skip | число строк, которые будут пропущены перед чтением данных |
nlines | количество читаемых строк |
na.strings | присваивает значения, отсутствующим данным (показывает как NA) |
flush | логический, если TRUE, то scan переходит на следующую строку, как только достигнет последнего столбца |
strip.white | (условное выражение к sep ), если TRUE, то удаляются дополнительные пробелы до и после символьных переменных |
quiet | логический, если FALSE, scan отображает строку, показывающую, какие поля были прочитаны |
Функция read.fwf() используется, для чтения данных имеющих определенный фиксированный формат:
read.fwf (файл, widths, sep = "\t ", as is=FALSE, skip=0, row.names, col.names)
Например, если файл data.txt имеет следующий вид:
A1 | ||
A1 | ||
B1 | ||
B1 | ||
C1 | ||
C1 |
То его можно прочитать следующим образом:
> mydata <-read.fwf("data.txt", widths=c(1,4,3))
> mydata
V1 V2 V3
1 А 1.50 1.2
2 А 1.55 1.3
3 B 1.60 1.4
4 B 1.65 1.5
5 C 1.70 1.6
6 C 1.75 1.7