R Language
Lesen und Schreiben von Tabellendaten in Klartextdateien (CSV, TSV usw.)
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
hatread.csv
header = TRUE
und verwendet die erste Zeile als Spaltennamen. - Alle diese Funktionen werden Strings konvertieren
factor
Klasse standardmäßig , es sei denn entwederas.is = TRUE
oderstringsAsFactors = FALSE
. - Die
read.csv2
Variante verwendet standardmäßigsep = ";"
unddec = ","
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 wieread.table
. Ein fehlendes Argument istna.comment
kann zu unerwünschtem Verhalten führen, wenn die Quelldatei#
enthält. -
fread
verwendet nur"
fürquote
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()
nichtread.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_*
vonfwf_*
bieten alternative Möglichkeiten zum Angeben von Spaltenlängen, einschließlich des automatischenfwf_empty
(fwf_empty
). - readr ist schneller als Basis R
- Spaltentitel können nicht automatisch aus der Datendatei importiert werden