CSV-Reihenfolge in R erhalten

8

Die Reihenfolge meiner Daten ist wichtig. Wenn ich eine CSV-Datei mit read.csv in R lade, ist die Reihenfolge der Zeilen im Dataframe garantiert mit denen der CSV-Datei identisch?

Wie wäre es, wenn ich eine Reihe von CSVs und rbind sie zusammen lade und dann subset verwende, um die Daten zu erhalten, die mich interessieren?

Zum Beispiel:

1.csv

%Vor%

2.csv

%Vor%

Wird das Folgende:

%Vor%

... immer erzeugt filtered als:

%Vor%

... und gilt dieses Verhalten für beliebige CSV-Eingaben und Filter?

    
Xophmeister 18.01.2017, 18:54
quelle

3 Antworten

4

Lesen Sie den Quellcode für read.table durch. Es verwendet die Basisfunktion scan , die selbst die Funktionen file und textConnection verwendet. All dies scheint darauf zu deuten, dass Sie Daten sequentiell ("Linie" durch "Linie" basierend auf dem Begrenzer) einlesen und einspeisen können.

%Vor%     
Kamil 21.02.2018 01:42
quelle
3

Dies ist ein einfacher Code, mit dem Sie die Ergebnisse von read.csv und subset überprüfen können:

Vergleichen Sie read.csv mit readLines

Hier haben Sie einen Code, der das Ergebnis von read.csv mit readLines vergleicht (Funktion Zeile für Zeile eine Datei lesen)

%Vor%

Sie können es mit Ihrer CSV-Datei verwenden, um Ergebnisse zu vergleichen und sicherzustellen, dass read.csv die Zeilenreihenfolge als readLines beibehält.

Vergleichen Sie subset mit rbind + einfache Filterung

Über den zweiten Teil der Frage noch ein einfacher Test:

%Vor%

Sie können diese Art von Tests in Ihren Code aufnehmen, aber das ist offensichtlich ineffizient und redundant.

    
Terru_theTerror 20.02.2018 08:38
quelle
3

Es ist davon auszugehen, dass alle diese Funktionen ( read.csv , rbind und subset ) garantiert die Reihenfolge Ihrer Daten wie im ursprünglichen csv erhalten.

Persönlich bevorzuge ich dplyr::filter über base::subset . Wie in dieser Antwort beschrieben, arbeiten die beiden fast identisch. Der Hauptunterschied besteht darin, dass subset eine Warnung in ?subset enthält: "Dies ist eine Convenience-Funktion, die interaktiv verwendet werden soll. Für die Programmierung ist es besser, die Standard-Subsetting-Funktionen wie [ zu verwenden. Standardauswertung der Argument-Teilmenge kann unvorhergesehene Konsequenzen haben. " filter ist so konzipiert, dass es sowohl mit dem Rest von dplyr als auch mit tidyverse sowohl interaktiv als auch programmatisch arbeitet und bei Bedarf eine separate Standard-Evaluierungsversion filter_ hat. Vielleicht ist filter also eine sicherere Wette , besonders wenn Sie bereits das dplyr -Framework verwenden. Der einzige Nachteil von filter ist, dass rownames nicht gespeichert werden, während subset dies tut.

Wie auch immer, ich glaube wirklich nicht, dass Sie sich Sorgen machen müssen, dass Reihen neu gemischt werden. Meiner Erfahrung nach haben all diese Funktionen immer R-Objekte erzeugt, die in Bezug auf die Originaldaten geordnet sind. Wenn Sie sehr vorsichtig sein wollen, würde es nicht schaden, mit dem Vorschlag von @ user127649 zu gehen und eine eindeutige ID-Spalte als Backup hinzuzufügen. Ich bin immer für Faulenzer-Optionen, aber es könnte sich lohnen, beruhigt zu sein!

    
Joy Vaz 26.02.2018 16:46
quelle

Tags und Links