0Pricing
R Academy · Lektion

order() für flexible Sortierung

Ermitteln Sie die Indexpermutation, um nach einem oder mehreren Kriterien zu sortieren.

order() für flexible Sortierung ist eine kostenlose R Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des R Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.

Was gibt order() zurück?

order() gibt keine sortierten Werte zurück, sondern die Indizes, mit denen der Vektor sortiert würde. Diese indirekte Vorgehensweise macht die Funktion deutlich leistungsfähiger als sort(), da Sie die Indizes auf beliebige zugehörige Strukturen anwenden können.

x <- c(30, 10, 50, 20, 40)
indices <- order(x)
print(indices)
# Verify: x[indices] gives sorted x
print(x[indices])

order() in absteigender Reihenfolge

Wie sort() akzeptiert auch order() das Argument decreasing = TRUE, um Indizes für eine absteigende Reihenfolge zurückzugeben. Das ist nützlich, wenn Sie vom größten zum kleinsten Wert sortieren möchten.

scores <- c(78, 92, 65, 88, 71)
desc_order <- order(scores, decreasing = TRUE)
cat('Rank order (index):', desc_order, '\n')
cat('Scores high to low:', scores[desc_order], '\n')

Einen Data Frame nach einer Spalte sortieren

Die praktischste Verwendung von order() ist das Sortieren eines Data Frames nach einer seiner Spalten. Übergeben Sie die Spalte an order() und verwenden Sie anschließend die Indizes, um alle Zeilen des Data Frames neu anzuordnen.

df <- data.frame(
  name = c('Charlie', 'Alice', 'Bob', 'Diana'),
  age  = c(35, 28, 42, 31)
)
sorted_df <- df[order(df$age), ]
print(sorted_df)

Einen Data Frame absteigend sortieren

Um einen Data Frame anhand einer numerischen Spalte vom größten zum kleinsten Wert zu sortieren, übergeben Sie decreasing = TRUE an order(). Die Zeilennamen (Indizes) im Ergebnis entsprechen weiterhin den ursprünglichen Positionen.

products <- data.frame(
  item  = c('Pen', 'Notebook', 'Stapler', 'Tape'),
  price = c(1.5, 4.99, 7.25, 2.10)
)
products[order(products$price, decreasing = TRUE), ]

Sortierung nach mehreren Spalten

Übergeben Sie mehrere durch Kommas getrennte Vektoren an order(). R sortiert zunächst nach dem ersten Argument und löst gleiche Werte anschließend mithilfe des zweiten, dritten usw. Arguments auf. Dieses Verhalten entspricht der ORDER-BY-Klausel in SQL.

df <- data.frame(
  dept   = c('HR', 'IT', 'HR', 'IT', 'HR'),
  salary = c(50000, 70000, 60000, 65000, 55000)
)
# Sort by dept first, then by salary within dept
df[order(df$dept, df$salary), ]

Gemischte auf- und absteigende Mehrfachsortierung

Um eine Spalte aufsteigend und eine andere absteigend zu sortieren, negieren Sie die numerische Spalte, die absteigend sortiert werden soll, mit -. Verwenden Sie bei Character-Spalten xtfrm(), um eine sortierbare Integer-Darstellung zu erhalten, und negieren Sie diese anschließend.

df <- data.frame(
  dept   = c('HR', 'IT', 'HR', 'IT', 'HR'),
  salary = c(50000, 70000, 60000, 65000, 55000)
)
# dept ascending, salary descending
df[order(df$dept, -df$salary), ]

NA in order() behandeln

order() besitzt wie sort() ein Argument na.last. Standardmäßig gilt na.last = NA, wodurch NAs ans Ende gesetzt werden. Mit na.last = TRUE oder na.last = FALSE können Sie ihre Position explizit festlegen.

vals <- c(5, NA, 2, NA, 8, 1)
# Default: NAs sorted last
order(vals)
# NAs first
order(vals, na.last = FALSE)

Zeilennamen nach dem Sortieren bewahren

Wenn Sie einen Data Frame mit Zeilenindizes auswählen, behält R die ursprünglichen Zeilennamen bei. Verwenden Sie row.names(df) <- NULL oder Ansätze mit reset=, um sie nach dem Sortieren auf 1, 2, 3, ... zurückzusetzen.

df <- data.frame(
  city = c('Paris', 'Tokyo', 'NYC'),
  pop  = c(2.1, 13.9, 8.3)
)
sorted <- df[order(df$pop), ]
print(sorted)
# Reset row names
row.names(sorted) <- NULL
print(sorted)

order() und sort() im Vergleich

Der entscheidende Unterschied: sort(x) gibt sortierte Werte zurück, während order(x) sortierte Positionen liefert. Verwenden Sie sort(), wenn Sie nur die Werte benötigen, und order(), wenn Sie zugehörige Datenstrukturen gemeinsam neu anordnen müssen.

x <- c(50, 20, 80, 10, 60)
cat('sort(x)  :', sort(x), '\n')
cat('order(x) :', order(x), '\n')
cat('x[order(x)]:', x[order(x)], '\n')

Einen Data Frame nach einer Character-Spalte sortieren

Sie können auch nach Character-Spalten sortieren. order(df$name) gibt Zeilenindizes in alphabetischer Reihenfolge der Namensspalte zurück. Diese Indizes verwenden Sie anschließend, um den Data Frame neu anzuordnen.

employees <- data.frame(
  name   = c('Zara', 'Ahmed', 'Maria', 'Bruno'),
  tenure = c(3, 7, 2, 5)
)
employees[order(employees$name), ]

order() für komplexe Sortierungen verketten

Eine Sortierung auf drei Ebenen ist unkompliziert: Übergeben Sie drei Vektoren an order(). Jedes weitere Argument dient als Tie-Breaker für gleiche Werte in den vorherigen Argumenten.

df <- data.frame(
  region = c('West', 'East', 'West', 'East', 'West'),
  dept   = c('HR', 'IT', 'HR', 'IT', 'IT'),
  score  = c(85, 90, 78, 88, 92)
)
df[order(df$region, df$dept, df$score), ]

Schnelltest

Was gibt order(x) zurück, wenn die Funktion auf einen Vektor x angewendet wird?

Die wichtigsten Erkenntnisse zu order()

Die wichtigsten Erkenntnisse zu order():

  • order(x) gibt Indizes, nicht Werte zurück — verwenden Sie x[order(x)], um sortierte Werte zu erhalten
  • Sortieren Sie Data Frames mit df[order(df$col), ]
  • Mehrspaltige Sortierung: order(df$a, df$b) — gleiche Werte in a werden anhand von b aufgelöst
  • Negieren Sie numerische Spalten mit -, um sie bei einer Mehrfachsortierung absteigend zu sortieren
  • Steuern Sie die Position von NAs mit na.last = TRUE/FALSE/NA
  • Im Gegensatz zu sort() können Sie mit order() parallele Strukturen gemeinsam sortieren
df <- data.frame(
  name  = c('Eve', 'Bob', 'Alice', 'Charlie'),
  score = c(88, 92, 88, 75)
)
# Sort by score descending, then name ascending for ties
df[order(-df$score, df$name), ]

Häufig gestellte Fragen

Ist die Lektion „order() für flexible Sortierung“ kostenlos?

Ja — der vollständige Text von „order() für flexible Sortierung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des R Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „order() für flexible Sortierung“?

Ermitteln Sie die Indexpermutation, um nach einem oder mehreren Kriterien zu sortieren. Du übst R Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um R Academy zu starten?

Keine Vorkenntnisse erforderlich. R Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „order() für flexible Sortierung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser R Academy-Lektion Code schreiben und ausführen?

Ja. Jede R Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Vektoren mit sort() sortieren
  2. order() für flexible Sortierung
  3. Werte mit rank() rangieren
  4. Data Frames nach Spalten sortieren
← Zurück zu R Academy