Поиск…


Синтаксис

  • read.csv (file, header = TRUE, sep = ",", quote = "" ", dec =". ", fill = TRUE, comment.char =" ", ...)

  • read.csv2 (file, header = TRUE, sep = ";", quote = "" ", dec =", ", fill = TRUE, comment.char =" ", ...)

  • readr :: read_csv (файл, col_names = TRUE, col_types = NULL, locale = default_locale (), na = c ("", "NA"), comment = "", trim_ws = TRUE, skip = 0, n_max = -1 , progress = interactive ())

  • data.table :: fread (input, sep = "auto", sep2 = "auto", nrows = -1L, header = "auto", na.strings = "NA", strAsAsFactors = FALSE, verbose = getOption ("datatable .wowbose "), autostart = 1L, skip = . ")". else ",", col.names, check.names = FALSE, encoding = "unknown", strip.white = TRUE, showProgress = getOption ("datatable.showProgress"), # default: ИСТИНА. table = getOption ("datatable.fread.datatable") # default: TRUE)

параметры

параметр подробности
файл имя файла CSV для чтения
заголовок логически: содержит ли файл .csv строку заголовка с именами столбцов?
сентябрь символ: символ, который разделяет ячейки на каждой строке
котировка символ: символ, используемый для указания символьных строк
декабрь символ: символ, используемый как десятичный разделитель
заполнить логическое: если TRUE, строки с неравной длиной заполняются пустым полем.
comment.char character: character используется как комментарий в файле csv. Строки, которым предшествует этот символ, игнорируются.
... дополнительные аргументы, которые необходимо передать read.table

замечания

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

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

Импорт файлов .csv

Импорт с использованием базы R

Файлы значений с разделителями-запятыми (CSV) можно импортировать с помощью read.csv , который обертывает read.table , но использует sep = "," чтобы установить разделитель в запятую.

# get the file path of a CSV included in R's utils package
csv_path <- system.file("misc", "exDIF.csv", package = "utils")

# path will vary based on installation location
csv_path
## [1] "/Library/Frameworks/R.framework/Resources/library/utils/misc/exDIF.csv"

df <- read.csv(csv_path)

df
##    Var1 Var2
## 1  2.70    A
## 2  3.14    B
## 3 10.00    A
## 4 -7.00    A

Удобный для пользователя вариант, file.choose , позволяет просматривать каталоги:

df <- read.csv(file.choose())

Заметки

  • В отличие от read.table , read.csv умолчанию имеет значение header = TRUE и использует первую строку как имена столбцов.
  • Все эти функции будут преобразовывать строки в класс factor по умолчанию, если только as.is = TRUE или stringsAsFactors = FALSE .
  • Вариант read.csv2 умолчанию имеет значение sep = ";" и dec = "," для использования в данных из стран, где запятая используется как десятичная точка и точка с запятой как разделитель полей.

Импорт с использованием пакетов

В readr ПАКЕТ в read_csv функция предлагает гораздо более высокую производительность, индикатор выполнения для больших файлов, а также более популярные опции по умолчанию , чем стандартный read.csv , включая stringsAsFactors = FALSE .

library(readr)

df <- read_csv(csv_path)

df
## # A tibble: 4 x 2
##    Var1  Var2
##   <dbl> <chr>
## 1  2.70     A
## 2  3.14     B
## 3 10.00     A
## 4 -7.00     A

Импорт с помощью data.table

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

# get the file path of a CSV included in R's utils package
csv_path <- system.file("misc", "exDIF.csv", package = "utils")

# path will vary based on R installation location
csv_path
## [1] "/Library/Frameworks/R.framework/Resources/library/utils/misc/exDIF.csv"

dt <- fread(csv_path)

dt
##     Var1 Var2
## 1:  2.70    A
## 2:  3.14    B
## 3: 10.00    A
## 4: -7.00    A

Где input аргумента представляет собой строку, представляющую:

  • имя файла ( например, "filename.csv" ),
  • команда оболочки, которая действует на файл ( например, "grep 'word' filename" ) или
  • сам вход ( например, "input1, input2 \n A, B \n C, D" ).

fread возвращает объект класса data.table который наследует класс data.frame , подходящий для использования с использованием data.table [] . Чтобы вернуть обычный data.frame, установите для параметра data.table значение FALSE :

df <- fread(csv_path, data.table = FALSE)

class(df)
## [1] "data.frame"

df
##    Var1 Var2
## 1  2.70    A
## 2  3.14    B
## 3 10.00    A
## 4 -7.00    A

Заметки

  • fread не имеет всех параметров, таких как read.table . Один отсутствующий аргумент - na.comment , что может привести к нежелательному поведению, если исходный файл содержит # .
  • fread использует только " для параметра quote .
  • fread использует несколько (5) строк для определения типов переменных.

Импорт файлов .tsv в виде матриц (базовый R)

Многие люди не используют file.path при создании пути к файлу. Но если вы работаете на машинах Windows, Mac и Linux, обычно рекомендуется использовать их для создания путей вместо paste .

FilePath <- file.path(AVariableWithFullProjectPath,"SomeSubfolder","SomeFileName.txt.gz")

Data <- as.matrix(read.table(FilePath, header=FALSE, sep ="\t"))

Обычно этого достаточно для большинства людей.

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

Возьмем предыдущий пример. В этом случае FilePath содержит файл размером 8970 8970 с 79% ячеек, содержащих ненулевые значения.

system.time(expr=Data<-as.matrix(read.table(file=FilePath,header=FALSE,sep=" ") ))

system.time говорит, что 267 секунд были взяты для чтения файла.

   user  system elapsed
265.563   1.949 267.563

Аналогично, этот файл можно читать по строкам,

FilePath <- "SomeFile"
connection<- gzfile(FilePath,open="r")
TableList <- list()
Counter <- 1
system.time(expr= while ( length( Vector<-as.matrix(scan(file=connection, sep=" ", nlines=1, quiet=TRUE)) ) > 0 ) {
    TableList[[Counter]]<-Vector
    Counter<-Counter+1
})
   user  system elapsed
165.976   0.060 165.941
close(connection)
system.time(expr=(Data <- do.call(rbind,TableList)))
   user  system elapsed
  0.477   0.088   0.565

Существует также пакет futile.matrix , который реализует метод read.matrix , сам код будет показывать то же самое, что описано в примере 1.

Экспорт файлов .csv

Экспорт с использованием базы R

Данные могут быть записаны в CSV-файл с помощью write.csv() :

write.csv(mtcars, "mtcars.csv")

Обычно заданные параметры включают row.names = FALSE и na = "" .


Экспорт с использованием пакетов

readr::write_csv значительно быстрее, чем write.csv и не записывает имена строк.

library(readr)

write_csv(mtcars, "mtcars.csv")

Импортировать несколько файлов csv

files = list.files(pattern="*.csv")
data_list = lapply(files, read.table, header = TRUE)

Это читает каждый файл и добавляет его в список. Впоследствии, если все data.frame имеют одинаковую структуру, их можно объединить в один большой файл data.frame:

df <- do.call(rbind, data_list)

Импорт файлов фиксированной ширины

Файлы с фиксированной шириной - это текстовые файлы, в которых столбцы не разделены каким-либо разделителем символов, например , или ; , но имеют фиксированную длину символа ( ширину ). Обычно данные заполняются пробелами.

Пример:

Column1 Column2   Column3           Column4Column5 
1647    pi        'important'       3.141596.28318
1731    euler     'quite important' 2.718285.43656
1979    answer    'The Answer.'     42     42

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


Импорт с базой R

df <- read.fwf('constants.txt', widths = c(8,10,18,7,8), header = FALSE, skip = 1)

df
#>     V1     V2                 V3         V4        V5
#> 1 1647     pi         'important'   3.14159   6.28318
#> 2 1731  euler   'quite important'   2.71828   5.43656
#> 3 1979 answer       'The Answer.'   42        42.0000

Замечания:

  • Названия столбцов не должны разделяться символом ( Column4Column5 )
  • Параметр widths определяет ширину каждого столбца
  • Не разделенные заголовки не читаются с помощью read.fwf()

Импорт с помощью readr

library(readr)

df <- read_fwf('constants.txt', 
               fwf_cols(Year = 8, Name = 10, Importance = 18, Value = 7, Doubled = 8), 
               skip = 1)
df
#> # A tibble: 3 x 5
#>    Year    Name        Importance    Value  Doubled
#>    <int>   <chr>           <chr>     <dbl>    <dbl>
#> 1  1647      pi       'important'  3.14159  6.28318
#> 2  1731   euler 'quite important'  2.71828  5.43656
#> 3  1979  answer     'The Answer.' 42.00000 42.00000

Замечания:

  • Функции readw's fwf_* helper предоставляют альтернативные способы указания длины столбцов, включая автоматическое угадывание ( fwf_empty )
  • readr быстрее, чем база R
  • Заголовки столбцов не могут быть автоматически импортированы из файла данных


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow