Sök…


Syntax

  • read.csv (fil, rubrik = SANT, sep = ",", offert = "" ", dek =". ", fyll = SANT, kommentar.char =" ", ...)

  • read.csv2 (fil, rubrik = SANT, sep = ";", offert = "" ", dek =", ", fyll = SÄTT, kommentar.char =" ", ...)

  • readr :: read_csv (fil, col_names = TRUE, col_types = NULL, locale = default_locale (), na = c ("", "NA"), comment = "", trim_ws = TRUE, hoppa = 0, n_max = -1 , framsteg = interaktiv ())

  • data.table :: fread (input, sep = "auto", sep2 = "auto", nrows = -1L, header = "auto", na.strings = "NA", stringsAsFactors = FALSE, verbose = getOption ("datatable .verbose "), autostart = 1L, hoppa = 0L, välj = NULL, släpp = NULL, colClasses = NULL, integer64 = getOption (" datatable.integer64 "), # standard:" integer64 "dec = if (sep! =" . ")". "annars", ", col.names, check.names = FALSE, kodning =" okänd ", strip.white = TRUE, showProgress = getOption (" datatable.showProgress "), # standard: TRUE data. tabell = getOption ("datatable.fread.datatable") # standard: SANT)

parametrar

Parameter detaljer
fil namn på CSV-filen som ska läsas
rubrik logiskt: innehåller .csv-filen en rubrikrad med kolumnnamn?
september karaktär: symbol som skiljer cellerna på varje rad
Citat karaktär: symbol som används för att citera teckensträngar
december karaktär: symbol som används som decimalavskiljare
fylla logiskt: när det är SANT fylls rader med ojämn längd med tomma fält.
comment.char karaktär: tecken som används som kommentar i csv-filen. Linjer som föregås av denna karaktär ignoreras.
... extra argument som ska överföras till read.table

Anmärkningar

Observera att export till ett vanligt textformat ofrar mycket av den information som är kodad i datan, som variabla klasser för bred portabilitet. För fall som inte kräver sådan portabilitet kan ett format som .RData eller Feather vara mer användbart.

Input / output för andra typer av filer täcks av flera andra ämnen, alla länkade från Input och output .

Importerar .csv-filer

Import med bas R

Kommaseparerade värdefiler (CSV) kan importeras med read.csv , som read.table , men använder sep = "," att ställa in avgränsaren till ett 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

Ett användarvänligt alternativ, file.choose , låter file.choose bläddra igenom katalogerna:

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

anteckningar

  • Till skillnad från read.table är read.csv standardhuvud header = TRUE och använder den första raden som kolumnnamn.
  • Alla dessa funktioner kommer att konvertera strängar till factor klass som standard såvida inte antingen as.is = TRUE eller stringsAsFactors = FALSE .
  • Varianten read.csv2 standard för sep = ";" och dec = "," för användning på data från länder där komma används som decimalpunkt och semikolon som fältavskiljare.

Importerar med paket

readr paketets read_csv funktion erbjuder mycket snabbare prestanda, en framstegsfält för stora filer och mer populära standardalternativ än standard read.csv , inklusive 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

Importerar med data.table

Paketet data.table introducerar funktionen fread . Även om det liknar read.table , är fread vanligtvis snabbare och mer flexibel, gissar filens avgränsare automatiskt.

# 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

Där argument input är en sträng som representerar:

  • filnamnet ( t.ex. "filename.csv" ),
  • ett skalkommando som fungerar på en fil ( t.ex. "grep 'word' filename" ), eller
  • själva ingången ( t.ex. "input1, input2 \n A, B \n C, D" ).

fread returnerar ett objekt av data.table som ärver från data.frame , lämpligt för användning med data.tabellens användning av [] . För att returnera en vanlig data.frame ställer data.table parametern data.tableFALSE :

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

anteckningar

  • fread har inte alla samma alternativ som read.table . Ett saknat argument är na.comment , vilket kan leda till oönskat beteende om källfilen innehåller # .
  • fread använder bara " för quote parameter.
  • fread använder få (5) rader för att gissa variabeltyper.

Importerar .tsv-filer som matriser (grundläggande R)

Många använder inte file.path när de gör en sökväg till en fil. Men om du arbetar över Windows, Mac och Linux-maskiner är det vanligtvis bra att använda det för att skapa banor istället för att paste .

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

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

I allmänhet är detta tillräckligt för de flesta.

Ibland händer det att matrisdimensionerna är så stora att proceduren för minnesallokering måste beaktas vid läsning i matrisen, vilket innebär läsning i matrisen rad för rad.

Ta det föregående exemplet. I detta fall innehåller FilePath en fil med dimension 8970 8970 med 79% av cellerna som innehåller icke-nollvärden.

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

system.time säger att 267 sekunder togs för att läsa filen.

   user  system elapsed
265.563   1.949 267.563

På liknande sätt kan den här filen läsas rad för rad,

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

Det finns också futile.matrix paketet som implementerar en read.matrix metod, koden i sig kommer att avslöja sig vara samma sak som beskrivs i exempel 1.

Exporterar .csv-filer

Export med bas R

Data kan skrivas till en CSV-fil med write.csv() :

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

Vanligt specificerade parametrar inkluderar row.names = FALSE och na = "" .


Export med paket

readr::write_csv är betydligt snabbare än write.csv och skriver inte write.csv .

library(readr)

write_csv(mtcars, "mtcars.csv")

Importera flera csv-filer

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

Detta läser varje fil och lägger till den i en lista. Efteråt, om alla data.frame har samma struktur kan de kombineras till en big data.frame:

df <- do.call(rbind, data_list)

Importerar filer med fast bredd

Fast bredd filer är textfiler i vilka kolumner inte skiljs åt av alla tecken avgränsare, som , eller ; , men snarare har en fast teckenlängd ( bredd ). Data är vanligtvis vadderade med vita utrymmen.

Ett exempel:

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

Låt oss anta att denna datatabell finns i den lokala filen constants.txt i arbetskatalogen.


Import med bas 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

Notera:

  • Kolumntitlar behöver inte separeras med ett tecken ( Column4Column5 )
  • widths definierar bredden på varje kolumn
  • Icke separerade rubriker kan inte läsas med read.fwf()

Importerar med 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

Notera:

  • readrs fwf_* hjälpfunktioner erbjuder alternativa sätt att specificera kolumnlängder, inklusive automatisk gissning ( fwf_empty )
  • readr är snabbare än bas R
  • Kolumntitlar kan inte importeras automatiskt från datafilen


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow