Suche…


Syntax

  • 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 (file, col_names = TRUE, col_types = NULL, locale = default_locale (), na = c ("", "NA")), comment = "", trim_ws = TRUE, überspringen = 0, n_max = -1 Fortschritt = interaktiv ())

  • data.table :: fread (input, sep = "auto", sep2 = "auto", nrows = -1L, header = "auto", na.strings = "NA", stringsAsFactors = FALSE, verbose = getOption ("datatable") .verbose "), autostart = 1L, überspringen = 0L, select = NULL, drop = NULL, colClasses = NULL, integer64 = getOption (" datatable.integer64 "), # default:" integer64 "dec = if (sep! =" . ")". "else", ", col.names, check.names = FALSE, Kodierung =" unbekannt ", strip.white = TRUE, showProgress = getOption (" datatable.showProgress "), # default: TRUE data. table = getOption ("datatable.fread.datatable") # default: TRUE

Parameter

Parameter Einzelheiten
Datei Name der zu lesenden CSV-Datei
Header logisch: Enthält die CSV-Datei eine Kopfzeile mit Spaltennamen?
sep Zeichen: Symbol, das die Zellen in jeder Zeile trennt
Zitat Zeichen: Symbol für Anführungszeichen
dez Zeichen: Symbol als Dezimaltrennzeichen
füllen logisch: Bei TRUE werden Zeilen mit ungleicher Länge mit leeren Feldern gefüllt.
comment.char Zeichen: Zeichen, das als Kommentar in der CSV-Datei verwendet wird. Zeilen, denen dieses Zeichen vorangestellt ist, werden ignoriert.
... zusätzliche Argumente, die an read.table

Bemerkungen

Beachten Sie, dass beim Exportieren in ein Nur-Text-Format ein Großteil der in den Daten codierten Informationen, wie z. B. Variablenklassen, aus Gründen der großen Portabilität geopfert wird. In Fällen, in denen eine solche Portabilität nicht erforderlich ist, kann ein Format wie .RData oder Feather sinnvoller sein.

Die Eingabe / Ausgabe für andere Dateitypen wird in mehreren anderen Themen behandelt, die alle mit Eingabe und Ausgabe verknüpft sind.

.Csv-Dateien importieren

Import mit Basis R

Comma-Separated-Value-Dateien (CSVs) können mit read.csv importiert werden. Dabei wird read.csv read.table , aber mit sep = "," das Trennzeichen auf ein Komma gesetzt.

# 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

Die benutzerfreundliche Option file.choose ermöglicht das Durchsuchen der Verzeichnisse:

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

Anmerkungen

  • Im Gegensatz zu read.table hat read.csv header = TRUE und verwendet die erste Zeile als Spaltennamen.
  • Alle diese Funktionen werden Strings konvertieren factor Klasse standardmäßig , es sei denn entweder as.is = TRUE oder stringsAsFactors = FALSE .
  • Die read.csv2 Variante verwendet standardmäßig sep = ";" und dec = "," für Daten aus Ländern, in denen das Komma als Dezimalpunkt und das Semikolon als Feldtrennzeichen verwendet wird.

Importieren mit Paketen

Die readr Paket read_csv Funktion bietet viel schnellere Leistung, einen Fortschrittsbalken für große Dateien und populäreren Standardoptionen als Standard read.csv , einschließlich 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

Importieren mit data.table

Das Paket data.table führt die Funktion fread . Während es ähnlich ist read.table , fread ist in der Regel schneller und flexibler, automatisch die Datei der Begrenzungs erraten.

# 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

Wo Argument input ist eine Zeichenfolge , die:

  • der Dateiname ( zB "filename.csv" ),
  • ein Shell-Befehl, der auf eine Datei wirkt ( z. B. "grep 'word' filename" ), oder
  • der Eingang selbst ( zB "input1, input2 \n A, B \n C, D" ).

fread gibt ein Objekt der Klasse data.table , die von Klasse erbt data.frame mit der data.table der Nutzung, geeignet für die Verwendung [] . Um ein gewöhnliches data.frame zurückzugeben, setzen Sie den data.table -Parameter auf 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

Anmerkungen

  • fread hat nicht alle Optionen wie read.table . Ein fehlendes Argument ist na.comment kann zu unerwünschtem Verhalten führen, wenn die Quelldatei # enthält.
  • fread verwendet nur " für quote Parameter.
  • fread verwendet einige (5) Zeilen, um Variablentypen zu erraten.

.Tsv-Dateien als Matrizen importieren (Basis-R)

Viele Leute verwenden file.path nicht, wenn Sie den Pfad zu einer Datei erstellen. Wenn Sie mit Windows-, Mac- und Linux-Computern arbeiten, empfiehlt es sich normalerweise, Pfade anstelle von paste .

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

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

Im Allgemeinen reicht dies für die meisten Menschen aus.

Es kommt manchmal vor, dass die Matrixabmessungen so groß sind, dass die Prozedur der Speicherzuordnung beim Einlesen der Matrix berücksichtigt werden muss, was bedeutet, dass die Matrix Zeile für Zeile eingelesen wird.

Nehmen Sie das vorherige Beispiel. In diesem Fall enthält FilePath eine Datei der Dimension 8970 8970 wobei 79% der Zellen Werte enthalten, die nicht Null sind.

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

system.time dass 267 Sekunden zum Lesen der Datei benötigt wurden.

   user  system elapsed
265.563   1.949 267.563

Ebenso kann diese Datei Zeile für Zeile gelesen werden.

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

Es gibt auch das Paket futile.matrix , das eine read.matrix Methode implementiert. Der Code selbst enthüllt sich als das gleiche wie in Beispiel 1 beschrieben.

.Csv-Dateien exportieren

Export mit Basis R

Daten können mit write.csv() in eine CSV-Datei geschrieben werden:

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

Zu den row.names = FALSE angegebenen Parametern gehören row.names = FALSE und na = "" .


Exportieren mit Paketen

readr::write_csv ist deutlich schneller als write.csv und schreibt keine write.csv .

library(readr)

write_csv(mtcars, "mtcars.csv")

Importieren Sie mehrere CSV-Dateien

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

Dies liest jede Datei und fügt sie einer Liste hinzu. Wenn alle data.frame danach dieselbe Struktur haben, können sie zu einem großen data.frame kombiniert werden:

df <- do.call(rbind, data_list)

Dateien mit fester Breite importieren

Feste Breite Dateien , Textdateien , in denen Spalten von keinen Zeichenbegrenzer getrennt ist , wie , oder ; , sondern haben eine feste Zeichenlänge ( Breite ). Daten werden normalerweise mit Leerzeichen aufgefüllt.

Ein Beispiel:

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

Nehmen wir an, diese Datentabelle befindet sich in der lokalen Datei constants.txt im Arbeitsverzeichnis.


Import mit 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

Hinweis:

  • Column4Column5 müssen nicht durch ein Zeichen getrennt werden ( Column4Column5 )
  • Der widths Parameter definiert die Breite jeder Spalte
  • Nicht getrennte Header können mit read.fwf() nicht read.fwf()

Importieren mit 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

Hinweis:

  • Die Hilfsfunktionen fwf_* von fwf_* bieten alternative Möglichkeiten zum Angeben von Spaltenlängen, einschließlich des automatischen fwf_empty ( fwf_empty ).
  • readr ist schneller als Basis R
  • Spaltentitel können nicht automatisch aus der Datendatei importiert werden


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow