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:
... und gilt dieses Verhalten für beliebige CSV-Eingaben und Filter?
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.
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)
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.
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!