Ich wollte, die von irgendeiner Spalte und Untergruppe, ein mehrspaltigen Datenrahmen, aber der Befehl, um zu bestellen nichtReihenfolge und Teilmenge eines mehrspaltigen Datenrahmens in R?
print(df[order(df$x) & df$x < 5,])
bestellt Dies ist nicht das Ergebnis nicht funktionierte.
Um dies zu debuggen ich einen Test Datenrahmen mit 1 Spalte erzeugt, aber diese ‚Vereinfachung‘ hatte unerwartete Auswirkungen
df <- data.frame(x = sample(1:50))
print(df[order(df$x) & df$x < 5,])
Dies ist nicht das Ergebnis der Reihenfolge so fühlte ich das Problem reproduziert hatte, aber mit einfachen Daten.
Brechen der Prozess zum ersten Bestellung nach unten und dann führte subsetting mir die Ordnung in diesem Fall zu entdecken, erzeugt keine Datenrahmen Objekt
df <- data.frame(x = sample(1:50))
ndf <- df[order(df$x),]
print(class(ndf))
produziert
[1] "integer"
Der Versuch, die resultierende "der Teilmenge Ganzzahl "ndf-Objekt mit Datenframesyntax z
print(ndf[ndf$x < 5, ])
erzeugt offensichtlich einen Fehler:
Error in ndf$x : $ operator is invalid for atomic vectors.
Vereinfachen noch weiter, fand ich subsetting allein (nicht die Reihenfolge Funktion Anwendung) erzeugen keine Datenrahmen Objekt
ndf <- df[df$x < 5,]
class(ndf)
[1] "integer"
Es stellt sich heraus Für den mehrspaltigen Datenrahmen funktioniert die Trennung der Reihenfolge und der Teilmenge wie erwartet
und dies löste mein ursprüngliches Problem, sondern führte zu zwei weiteren Fragen:
- Warum ist der Typ des Objekts zurückgegeben, wie oben auf der Grundlage des 1 Spalte Datenrahmen Testfall beschrieben, keinen Datenrahmen? (Ich schätze, ein 1-Spalten-Datenframe enthält nur einen einzelnen Vektor, aber es ist immer noch in einem Datenrahmen verpackt?)
- Ist es möglich, einen mehrspaltigen Datenrahmen in 1 Schritt zu bestellen und zu unterteilen?
data.frames in R vereinfacht automatisch an Vektoren durchgeführt werden, wenn nur eine Spalte auswählen: http://stackoverflow.com/questions/21025609/how-do-i-extract-a- Single-Column-from-a-Datenframe-as-a-Data-Frame (dies kann mit 'drop = FALSE' verhindert werden). Subsetting und Bestellung sind zwei verschiedene Operationen. Sie sollten sie in zwei logischen Schritten (aber möglicherweise eine Zeile Code) tun. – MrFlick