Menu
Coddy logo textTech

Hinzufügen und Sortieren

Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 45 von 64.

Die Zuweisung zu einem neuen Spaltennamen fügt die Spalte hinzu. Arithmetik zwischen Spalten funktioniert zeilenweise, wie jede Vektor-Arithmetik:

orders <- data.frame(item = c("tea", "jam", "oil"), qty = c(2, 5, 1), price = c(4, 2.5, 9))
orders$total <- orders$qty * orders$price
print(orders)

Ausgabe:

  item qty price total
1  tea   2   4.0   8.0
2  jam   5   2.5  12.5
3  oil   1   9.0   9.0

df[order(df$col), ] sortiert die Zeilen nach einer Spalte. Die Zeilennummern auf der linken Seite bleiben den ursprünglichen Zeilen zugeordnet. Verwende ein Minuszeichen oder decreasing = TRUE für eine Sortierung von hoch nach niedrig sowie ein zweites Kriterium bei Gleichständen:

orders <- data.frame(item = c("tea", "jam", "oil"), qty = c(2, 5, 1), price = c(4, 2.5, 9))
orders$total <- orders$qty * orders$price
print(orders[order(-orders$total, orders$item), c("item", "total")])

Ausgabe:

  item total
2  jam  12.5
3  oil   9.0
1  tea   8.0

Eine neue Spalte kann aus anderen Spalten erstellten Text enthalten. sprintf() funktioniert jeweils mit ganzen Spalten:

orders <- data.frame(item = c("tea", "jam"), qty = c(2, 5), price = c(4, 2.5))
orders$label <- sprintf("%d x %s", orders$qty, orders$item)
print(orders$label)

Ausgabe:

[1] "2 x tea" "5 x jam"

rbind() fügt eine Zeile aus einem Data Frame mit einer Zeile und denselben Spalten hinzu, und head(df, n) behält die ersten n Zeilen bei:

orders <- data.frame(item = c("tea", "jam"), qty = c(2, 5))
orders <- rbind(orders, data.frame(item = "oil", qty = 1))
print(nrow(orders))
print(head(orders[order(-orders$qty), ], 2))

Ausgabe:

[1] 3
  item qty
2  jam   5
1  tea   2
challenge icon

Aufgabe

Einfach

Vervollständige order_totals(df). df enthält die Spalten item, qty und price. Füge eine total-Spalte hinzu (Menge mal Preis), sortiere die Zeilen nach total von hoch nach niedrig (Elemente mit gleichen totals alphabetisch) und gib eine Zeile pro Datensatz zurück: jam: 12.50, wobei total auf zwei Dezimalstellen gerundet wird.

Der bereitgestellte Code liest die Tabelle mit read.csv(text = input) aus der Eingabe: Die erste Zeile enthält die Spaltennamen und jede folgende Zeile ist eine Zeile, wobei die Werte durch Kommas getrennt sind. Der Code gibt jede zurückgegebene Zeile aus.

Probier es selbst

order_totals <- function(df) {
  # Schreibe deinen Code hier
  character(0)
}

# Mitgelieferter Ein-/Ausgabe-Code: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input)
cat(order_totals(df), sep = "\n")
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik und Ablaufsteuerung

Übe selbstständig: Online-R-Compiler