Zoeken…


Syntaxis

  • read.csv (bestand, kop = WAAR, sep = ",", quote = "" ", dec =". ", fill = WAAR, comment.char =" ", ...)

  • read.csv2 (bestand, kop = WAAR, sep = ";", quote = "" ", dec =", ", fill = WAAR, 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 , voortgang = interactief ())

  • 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, selecteer = NULL, drop = NULL, colClasses = NULL, integer64 = getOption (" datatable.integer64 "), # default:" integer64 "dec = if (sep! =" . ")". "else", ", col.names, check.names = FALSE, encoding =" onbekend ", strip.white = TRUE, showProgress = getOption (" datatable.showProgress "), # default: TRUE data. table = getOption ("datatable.fread.datatable") # default: TRUE)

parameters

Parameter Details
het dossier naam van het te lezen CSV-bestand
hoofd logisch: bevat het .csv-bestand een koprij met kolomnamen?
september karakter: symbool dat de cellen op elke rij scheidt
citaat karakter: symbool dat wordt gebruikt om tekenreeksen te citeren
december karakter: symbool gebruikt als decimaal scheidingsteken
vullen logisch: wanneer WAAR, worden rijen met ongelijke lengte gevuld met lege velden.
comment.char character: karakter gebruikt als commentaar in het csv-bestand. Lijnen voorafgegaan door dit karakter worden genegeerd.
... extra argumenten die moeten worden doorgegeven aan read.table

Opmerkingen

Merk op dat het exporteren naar een tekst zonder opmaak veel van de in de gegevens gecodeerde informatie opslaat, zoals variabele klassen omwille van brede draagbaarheid. Voor gevallen die dergelijke portabiliteit niet vereisen, kan een indeling zoals .RData of Feather nuttiger zijn.

Input / output voor andere soorten bestanden wordt behandeld in verschillende andere onderwerpen, allemaal gelinkt vanuit Input en output .

CSV-bestanden importeren

Importeren met base R

Door komma's gescheiden waardebestanden (CSV's) kunnen worden geïmporteerd met read.csv , waarmee read.table wordt read.table , maar sep = "," gebruikt om het scheidingsteken in te stellen op een komma.

# 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

Een gebruiksvriendelijke optie, file.choose , maakt het mogelijk om door de mappen te bladeren:

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

Notes

  • In tegenstelling tot read.table , staat read.csv standaard header = TRUE en gebruikt de eerste rij als kolomnamen.
  • Al deze functies zullen standaard strings naar factor klasse converteren, tenzij as.is = TRUE of stringsAsFactors = FALSE .
  • De variant read.csv2 standaard ingesteld op sep = ";" en dec = "," voor gebruik in gegevens uit landen waar de komma wordt gebruikt als een decimale punt en de puntkomma als een veldscheidingsteken.

Importeren met behulp van pakketten

De readr pakket's read_csv functie biedt veel snellere prestaties, een voortgangsbalk voor grote bestanden, en nog veel meer populaire standaard opties dan de standaard read.csv , waaronder 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

Importeren met data.table

Het data.table pakket introduceert de functie fread . Hoewel het vergelijkbaar is met read.table , is fread meestal sneller en flexibeler, waarbij het scheidingsteken van het bestand automatisch wordt geraden.

# 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

Waar argument input is een tekenreeks die:

  • de bestandsnaam ( bijv. "filename.csv" ),
  • een shell-opdracht die op een bestand werkt ( bijvoorbeeld "grep 'word' filename" ), of
  • de invoer zelf ( bijvoorbeeld "input1, input2 \n A, B \n C, D" ).

fread retourneert een object van class data.table dat data.table van class data.frame , geschikt voor gebruik met het gebruik van de data.table van [] . Om een gewoon data.frame te retourneren, stelt u de parameter data.table op 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

Notes

  • fread heeft niet alle dezelfde opties als read.table . Een ontbrekend argument is na.comment , wat kan leiden tot ongewenst gedrag als het bronbestand # bevat.
  • fread gebruikt alleen " voor quote parameter quote .
  • fread gebruikt enkele (5) lijnen om variabeltypes te raden.

.Tsv-bestanden als matrices importeren (basis R)

Veel mensen maken geen gebruik van file.path bij het maken van een pad naar een bestand. Maar als u op Windows-, Mac- en Linux-machines werkt, is het meestal een goede gewoonte om het te gebruiken voor het maken van paden in plaats van paste .

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

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

Over het algemeen is dit voldoende voor de meeste mensen.

Soms gebeurt het dat de matrixafmetingen zo groot zijn dat bij het lezen in de matrix rekening moet worden gehouden met de procedure voor geheugentoewijzing, wat betekent dat de regel regel voor regel moet worden gelezen.

Neem het vorige voorbeeld, in dit geval bevat FilePath een bestand met dimensie 8970 8970 waarbij 79% van de cellen niet-nulwaarden bevat.

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

system.time zegt dat 267 seconden zijn genomen om het bestand te lezen.

   user  system elapsed
265.563   1.949 267.563

Op dezelfde manier kan dit bestand regel voor regel worden gelezen,

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

Er is ook het futile.matrix pakket dat een read.matrix methode implementeert, de code zelf zal hetzelfde zijn als beschreven in voorbeeld 1.

CSV-bestanden exporteren

Exporteren met base R

Gegevens kunnen naar een CSV-bestand worden geschreven met write.csv() :

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

Veelgebruikte parameters zijn row.names = FALSE en na = "" .


Exporteren met behulp van pakketten

readr::write_csv is aanzienlijk sneller dan write.csv en schrijft geen write.csv .

library(readr)

write_csv(mtcars, "mtcars.csv")

Meerdere csv-bestanden importeren

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

Hiermee wordt elk bestand gelezen en aan een lijst toegevoegd. Nadien, als alle data.frame dezelfde structuur hebben, kunnen ze worden gecombineerd tot één groot data.frame:

df <- do.call(rbind, data_list)

Bestanden met vaste breedte importeren

Vaste breedte zijn tekstbestanden waarin kolommen niet gescheiden door een karakter scheidingsteken, zoals , of ; , maar hebben liever een vaste tekenlengte ( breedte ). Gegevens worden meestal opgevuld met witte spaties.

Een voorbeeld:

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

Laten we aannemen dat deze gegevenstabel bestaat in het lokale bestand constants.txt in de werkmap.


Importeren met basis 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

Notitie:

  • Kolomtitels hoeven niet te worden gescheiden door een teken ( Column4Column5 )
  • De widths parameter definieert de breedte van elke kolom
  • Niet-gescheiden headers zijn niet leesbaar met read.fwf()

Importeren met 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

Notitie:

  • readr's fwf_* helperfuncties bieden alternatieve manieren om kolomlengtes op te geven, inclusief automatisch raden ( fwf_empty )
  • readr is sneller dan base R
  • Kolomtitels kunnen niet automatisch uit het gegevensbestand worden geïmporteerd


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow