Szukaj…


Składnia

  • read.csv (plik, nagłówek = PRAWDA, sep = ",", quote = "" ", dec =". ", fill = PRAWDA, comment.char =" ", ...)

  • read.csv2 (plik, nagłówek = PRAWDA, sep = ";", quote = "" ", dec =", ", fill = PRAWDA, comment.char =" ", ...)

  • readr :: read_csv (file, 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", stringsAsFactors = FALSE, verbose = getOption ("datatable .verbose "), autostart = 1L, skip = 0L, select = NULL, drop = NULL, colClasses = NULL, integer64 = getOption (" datatable.integer64 "), # default:" integer64 "dec = if (sep! =" .) table = getOption ("datatable.fread.datatable") # default: TRUE)

Parametry

Parametr Detale
plik nazwa pliku CSV do odczytania
nagłówek logiczne: czy plik .csv zawiera wiersz nagłówka z nazwami kolumn?
wrz znak: symbol oddzielający komórki w każdym rzędzie
zacytować znak: symbol używany do cytowania ciągów znaków
dec znak: symbol używany jako separator dziesiętny
napełnić logiczne: gdy PRAWDA, wiersze o nierównej długości są wypełniane pustymi polami.
comment.char znak: znak używany jako komentarz w pliku csv. Linie poprzedzone tym znakiem są ignorowane.
... dodatkowe argumenty do przekazania do read.table

Uwagi

Zauważ, że eksport do formatu zwykłego tekstu poświęca wiele informacji zakodowanych w danych, takich jak klasy zmiennych ze względu na szeroką przenośność. W przypadkach, które nie wymagają takiej przenośności, bardziej przydatny może być format .RData lub Wtapianie .

Dane wejściowe / wyjściowe dla innych typów plików są omówione w kilku innych tematach, wszystkie powiązane z danymi wejściowymi i wyjściowymi .

Importowanie plików .csv

Importowanie przy użyciu bazy R.

Pliki wartości rozdzielanych przecinkami (CSV) można importować za pomocą read.csv , który otacza read.table , ale używa sep = "," aby ustawić separator na przecinek.

# 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

Przyjazna dla użytkownika opcja file.choose pozwala przeglądać katalogi:

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

Notatki

  • W przeciwieństwie do read.table , read.csv domyślnie ma header = TRUE i używa pierwszego wiersza jako nazw kolumn.
  • Wszystkie te funkcje domyślnie konwertują ciągi znaków na klasę factor chyba że as.is = TRUE lub stringsAsFactors = FALSE .
  • Wariant read.csv2 domyślnie ma wartość sep = ";" i dec = "," do wykorzystania w danych z krajów, w których przecinek jest używany jako przecinek dziesiętny, a średnik jako separator pól.

Importowanie za pomocą pakietów

Funkcja readr pakietu read_csv oferuje znacznie większą wydajność, pasek postępu dla dużych plików i bardziej popularne domyślne opcje niż standardowe read.csv , w tym 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

Importowanie z data.table

Pakiet data.table wprowadza funkcję fread . Chociaż jest podobny do read.table , fread jest zwykle szybszy i bardziej elastyczny, automatycznie zgadując ogranicznik pliku.

# 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

Gdzie argumentem input jest ciąg znaków reprezentujący:

  • nazwa pliku ( np. "filename.csv" ),
  • polecenie powłoki, które działa na plik ( np. "grep 'word' filename" ) lub
  • samo wejście ( np. "input1, input2 \n A, B \n C, D" ).

fread zwraca obiekt klasy data.table który dziedziczy z klasy data.frame , odpowiedni do użycia z użyciem data.table [] . Aby zwrócić zwykłą ramkę data.frame, ustaw parametr data.table na 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

Notatki

  • fread nie ma wszystkich takich samych opcji jak read.table . Jednym brakującym argumentem jest na.comment , który może prowadzić do niepożądanych zachowań, jeśli plik źródłowy zawiera # .
  • fread używa tylko " jako parametru quote .
  • fread używa kilku (5) linii do odgadnięcia typów zmiennych.

Importowanie plików .tsv jako matryc (podstawowy R)

Wiele osób nie korzysta z file.path podczas tworzenia ścieżki do pliku. Ale jeśli pracujesz na komputerach z systemami Windows, Mac i Linux, zwykle dobrą praktyką jest używanie go do tworzenia ścieżek zamiast paste .

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

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

Zasadniczo jest to wystarczające dla większości ludzi.

Czasami zdarza się, że wymiary macierzy są tak duże, że procedura przydziału pamięci musi być brana pod uwagę podczas odczytu w macierzy, co oznacza czytanie w matrycy linia po linii.

Weźmy poprzedni przykład: W tym przypadku FilePath zawiera plik o wymiarze 8970 8970 z 79% komórek zawierających wartości niezerowe.

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

system.time mówi, że odczytanie pliku zajęło 267 sekund.

   user  system elapsed
265.563   1.949 267.563

Podobnie ten plik można odczytać wiersz po wierszu,

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

Istnieje również pakiet futile.matrix , który implementuje metodę read.matrix , sam kod ujawni się jako taki sam, jak opisano w przykładzie 1.

Eksportowanie plików .csv

Eksportowanie przy użyciu bazy R.

Dane można zapisać do pliku CSV za pomocą write.csv() :

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

Powszechnie określone parametry to row.names = FALSE i na = "" .


Eksportowanie przy użyciu pakietów

readr::write_csv jest znacznie szybszy niż write.csv i nie zapisuje nazw wierszy.

library(readr)

write_csv(mtcars, "mtcars.csv")

Zaimportuj wiele plików csv

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

Odczytuje każdy plik i dodaje go do listy. Następnie, jeśli wszystkie data.frame mają tę samą strukturę, można je połączyć w jedną dużą data.frame:

df <- do.call(rbind, data_list)

Importowanie plików o stałej szerokości

Pliki o stałej szerokości są pliki tekstowe, w których kolumny nie są oddzielone dowolną separator, jak , lub ; , ale mają raczej stałą długość ( szerokość ). Dane są zwykle uzupełniane białymi spacjami.

Przykład:

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

Załóżmy, że ta tabela danych istnieje w lokalnym pliku constants.txt w katalogu roboczym.


Importowanie z bazą 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

Uwaga:

  • Tytuły kolumn nie muszą być oddzielane znakiem ( Column4Column5 )
  • Parametr widths określa szerokość każdej kolumny
  • read.fwf() nagłówków nie można odczytać za pomocą read.fwf()

Importowanie za pomocą czytnika

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

Uwaga:

  • Funkcje pomocnicze readw fwf_* oferują alternatywne sposoby określania długości kolumn, w tym automatyczne zgadywanie ( fwf_empty )
  • readr jest szybszy niż podstawa R.
  • Tytułów kolumn nie można automatycznie importować z pliku danych


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow