Menu
CoddyTech

Vektor-Slicing und -Indizierung

Teil des Abschnitts Grundlagen der R-Journey von Coddy. Lektion 67 von 78.

Du hast gelernt, wie man auf einzelne Elemente zugreift und Vektoren durchläuft. Sehen wir uns nun an, wie man mithilfe von Slicing mehrere Elemente gleichzeitig extrahiert. Mit dieser Technik kannst du in einer einzigen Operation eine Teilmenge eines Vektors auswählen.

Um mehrere Elemente zu extrahieren, übergib einen Vektor von Indizes innerhalb der eckigen Klammern:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)])

Ausgabe:

[1] 10 30 50

Du kannst den Doppelpunkt-Operator auch verwenden, um einen Bereich aufeinanderfolgender Elemente auszuwählen:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4])

Ausgabe:

[1] 20 30 40

Negative Indizes sind in R leistungsstark. Sie schließen Elemente aus, anstatt sie auszuwählen:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2])

Ausgabe:

[1] 10 30 40 50

Du kannst mehrere Elemente ausschließen, indem du einen Vektor negativer Indizes übergibst:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)])

Ausgabe:

[1] 20 30 40

Denke daran: Du kannst positive und negative Indizes nicht in derselben Auswahl mischen. R gibt einen Fehler aus, wenn du numbers[c(1, -2)] ausprobierst.

challenge icon

Aufgabe

Einfach

Du erhältst zwei Eingabezeilen:

  1. Eine durch Kommas getrennte Liste von Zahlen (z. B. 100,200,300,400,500,600,700)
  2. Zwei durch ein Komma getrennte Indizes, die einen auszuschließenden Bereich darstellen (z. B. 2,5)

Der Startcode liest die Eingabe bereits ein und erstellt den numerischen Vektor. Gib genau vier Zeilen in dieser Reihenfolge aus:

  1. Gib die Elemente an den Positionen 1, 3 und 5 mithilfe eines Vektors von Indizes aus
  2. Gib die Elemente von Position 2 bis Position 4 mithilfe des Doppelpunktoperators aus
  3. Gib den Vektor aus, wobei das Element am ersten angegebenen Index ausgeschlossen wird (mithilfe negativer Indizierung)
  4. Gib den Vektor aus, wobei die Elemente vom ersten bis zum zweiten Index ausgeschlossen werden (mithilfe negativer Indizierung mit einem Bereich)

Wenn die Eingaben beispielsweise wie folgt lauten:

10,20,30,40,50,60,70
3,5

Die Ausgabe sollte wie folgt aussehen:

[1] 10 30 50
[1] 20 30 40
[1] 10 20 40 50 60 70
[1] 10 20 60 70

Erklärung:

  • Die Elemente an den Positionen 1, 3 und 5 sind: 10, 30, 50
  • Die Elemente von Position 2 bis 4 sind: 20, 30, 40
  • Der Ausschluss von Position 3 ergibt: 10, 20, 40, 50, 60, 70
  • Der Ausschluss der Positionen 3 bis 5 ergibt: 10, 20, 60, 70

Probier es selbst

# Eingabe lesen
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
indices_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# Die kommagetrennten Zahlen in einen numerischen Vektor parsen
numbers <- as.numeric(strsplit(numbers_input, ",")[[1]])

# Die beiden Indizes parsen
indices <- as.numeric(strsplit(indices_input, ",")[[1]])
idx1 <- indices[1]
idx2 <- indices[2]

# TODO: Schreibe deinen Code darunter
# 1. Elemente an den Positionen 1, 3 und 5 mit einem Vektor von Indizes ausgeben

# 2. Elemente von Position 2 bis Position 4 mit dem Doppelpunkt-Operator ausgeben

# 3. Den Vektor mit dem Element an idx1 ausgeschlossen ausgeben (negative Indizierung)

# 4. Den Vektor mit Elementen von idx1 bis idx2 ausgeschlossen ausgeben (negative Indizierung mit Bereich)
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 Grundlagen

Übe selbstständig: Online-R-Compiler