Kann mir bitte jemand sagen, wie man nur die ersten 6 Monate (7 Spalten) für jedes Jahr der folgenden Daten liest, zum Beispiel unter Verwendung von read.table()
?
Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2009 -41 -27 -25 -31 -31 -39 -25 -15 -30 -27 -21 -25
2010 -41 -27 -25 -31 -31 -39 -25 -15 -30 -27 -21 -25
2011 -21 -27 -2 -6 -10 -32 -13 -12 -27 -30 -38 -29
NULL
als Spaltenklasse .Antworten:
Angenommen, die Daten befinden sich in einer Datei
data.txt
, können Sie dascolClasses
Argument von verwendenread.table()
, um Spalten zu überspringen. Hier sind die Daten in den ersten 7 Spalten"integer"
und wir setzen die verbleibenden 6 Spalten so,"NULL"
dass sie anzeigen, dass sie übersprungen werden sollenWechseln Sie
"integer"
zu einem der akzeptierten Typen, wie in?read.table
Abhängigkeit vom tatsächlichen Datentyp beschrieben.data.txt
sieht aus wie das:und wurde erstellt mit
wo
dat
istWenn die Anzahl der Spalten vorher nicht bekannt ist,
count.fields
liest die Utility-Funktion die Datei durch und zählt die Anzahl der Felder in jeder Zeile.quelle
nrows
. Berechnen Sie dann, wie viele Spalten verwendet werdenncol()
, oder wie auch immer Sie die Anzahl der zu lesenden / zu ignorierenden Spalten ermitteln möchten. Lesen Sie dann die vollständige Datei anhand dieser Informationen.count.fields()
was den in den Kommentaren vorgeschlagenen Prozess automatisiert.count.fields()
eine Textverbindung übergeben. Lesen Sie also eine Teilmenge der Zeilen mittxt <- readLines(....)
, stellen Sie eine Verbindung zu den eingelesenen Zeilen hercon <- textConnection(txt)
und tun Sie diescount.fields(txt)
. Stellen Sie sicher, dass Sieskip
in verwendencount.fields()
, um die Kopfzeile zu überspringen, falls es eine gibt. Sie können keine Zeilen in der Datei mit überspringenreadLines()
.Um einen bestimmten Satz von Spalten aus einem Datensatz zu lesen, gibt es mehrere andere Optionen:
1) Mit
fread
aus demdata.table
Paket:Sie können die gewünschten Spalten mit dem
select
Parameterfread
aus demdata.table
Paket angeben . Sie können die Spalten mit einem Vektor aus Spaltennamen oder Spaltennummern angeben.Für den Beispieldatensatz:
Alternativ können Sie den
drop
Parameter verwenden, um anzugeben, welche Spalten nicht gelesen werden sollen:Alle ergeben:
UPDATE: Wenn Sie keine data.table
fread
zurückgeben möchten , verwenden Sie dendata.table = FALSE
-parameter, z.fread("data.txt", select = c(1:7), data.table = FALSE)
2) Mit
read.csv.sql
aus demsqldf
Paket:Eine weitere Alternative ist die
read.csv.sql
Funktion aus demsqldf
Paket:3) Mit den Funktionen
read_*
aus demreadr
Paket:Aus der Dokumentation eine Erklärung für die verwendeten Zeichen mit
col_types
:quelle
fread
unterstützt jedoch keine komprimierten Dateien. Große Dateien werden normalerweise komprimiert.fread
. Bemerkenswert ist, dassfread
die unkomprimierte Datei höchstwahrscheinlich erheblich schnellerread.table
gelesen wird als die komprimierte Datei. Ein Beispiel finden Sie hier .read.table
werden Sie nicht gespeichert . In diesem Fall sollten Sie sich dasff
Paket ansehen .fread
große komprimierte Dateien wie folgt lesen :fread("gunzip -c data.txt.gz", drop = c(8:13))
.Sie können auch JDBC verwenden, um dies zu erreichen. Lassen Sie uns eine Beispiel-CSV-Datei erstellen.
Laden Sie den CSV-JDBC-Treiber über diesen Link herunter und speichern Sie ihn: http://sourceforge.net/projects/csvjdbc/files/latest/download
quelle
Du machst es so:
quelle