0Pricing
R Academy · Lektion

Matrixindizierung und Subsetting

Greifen Sie mithilfe der Notation [row, col] auf Zeilen, Spalten und Elemente zu.

Matrixindizierung und Subsetting 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.

Grundlagen der Matrixindizierung

Um auf Elemente einer Matrix zuzugreifen, verwenden Sie die Schreibweise m[row, col]. Zeilen- und Spaltenindizes beginnen in R bei 1. Das Komma ist erforderlich – wenn Sie es weglassen, wird die Matrix als flacher Vektor behandelt.

m <- matrix(1:12, nrow = 3, ncol = 4)
cat('Full matrix:
')
print(m)

# Element at row 2, column 3
cat('m[2, 3] =', m[2, 3], '
')

# Element at row 1, column 4
cat('m[1, 4] =', m[1, 4], '
')

Eine vollständige Zeile extrahieren

Lassen Sie den Spaltenindex leer, um eine vollständige Zeile zu extrahieren. Das Ergebnis ist ein Vektor (die Dimension der Matrix wird entfernt). Das Komma muss trotzdem vorhanden sein.

scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')
print(scores)

# Extract Alice's row
alice_scores <- scores[1, ]
cat('Alice:', alice_scores, '
')
cat('Alice mean:', mean(alice_scores), '
')

Eine vollständige Spalte extrahieren

Lassen Sie den Zeilenindex leer, um eine vollständige Spalte zu extrahieren. Wie beim Extrahieren einer Zeile ist das Ergebnis ein Vektor. Das Komma zwischen Zeilen- und Spaltenposition muss weiterhin vorhanden sein.

scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')

# Extract the Math column
math_scores <- scores[, 1]
cat('Math scores:', math_scores, '
')
cat('Math mean:  ', mean(math_scores), '
')
cat('Math max:   ', max(math_scores), '
')

Mehrere Zeilen und Spalten auswählen

Verwenden Sie einen Vektor mit Indizes, um mehrere Zeilen oder Spalten auf einmal zu extrahieren. Das Ergebnis ist eine Untermatrix (weiterhin eine Matrix, kein Vektor), sodass die zweidimensionale Struktur erhalten bleibt.

m <- matrix(1:16, nrow = 4, ncol = 4)
cat('Original 4x4:
')
print(m)

# Extract rows 1,3 and columns 2,4
sub_m <- m[c(1, 3), c(2, 4)]
cat('Submatrix rows 1,3 cols 2,4:
')
print(sub_m)
cat('Class:', class(sub_m), '
')

Nach Zeilen- oder Spaltennamen zugreifen

Wenn eine Matrix Zeilen- und Spaltennamen hat, können Sie statt der Position den Namen für die Indizierung verwenden. Das ist besser lesbar und bleibt auch beim Umordnen von Zeilen oder Spalten robust.

scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE,
                 dimnames = list(
                   c('Alice', 'Bob', 'Carol'),
                   c('Math', 'Sci', 'Eng', 'Hist')
                 ))

# Access by name
cat('Bob Science:', scores['Bob', 'Sci'], '
')
cat('Carol row:
')
print(scores['Carol', ])
cat('English column:
')
print(scores[, 'Eng'])

Logische Indizierung von Matrizen

Sie können einen logischen Vektor (oder eine logische Matrix) verwenden, um Elemente auszuwählen. Wird ein logischer Vektor in einer Dimension verwendet, werden die Zeilen oder Spalten ausgewählt, deren Wert TRUE ist.

scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')

# Select students with mean score >= 85
row_means <- rowMeans(scores)
high_achievers <- scores[row_means >= 85, ]
cat('High achievers (mean >= 85):
')
print(high_achievers)

Negative Indizierung – Zeilen/Spalten ausschließen

Setzen Sie einem Index - voran, um die entsprechende Zeile oder Spalte auszuschließen. So können Sie bestimmte Zeilen oder Spalten einfach entfernen, ohne alle anderen anzugeben, die Sie behalten möchten.

m <- matrix(1:12, nrow = 3, ncol = 4, byrow = TRUE)
cat('Original:
')
print(m)

# Drop row 2
cat('Without row 2:
')
print(m[-2, ])

# Drop columns 1 and 3
cat('Without cols 1 and 3:
')
print(m[, c(-1, -3)])

Einzelnes Element mit drop = FALSE

Standardmäßig wird beim Extrahieren einer einzelnen Zeile oder Spalte die Dimension entfernt (es wird ein Vektor zurückgegeben). Verwenden Sie drop = FALSE, um das Ergebnis als Matrix beizubehalten (einschließlich der Zeilen-/Spaltenstruktur).

m <- matrix(1:9, nrow = 3, ncol = 3)

# Default: drops to vector
row1_vector <- m[1, ]
cat('m[1,] class:', class(row1_vector), '
')  # numeric (vector)

# drop = FALSE: keeps as 1-row matrix
row1_matrix <- m[1, , drop = FALSE]
cat('m[1,,drop=FALSE] class:', class(row1_matrix), '
')
cat('Dimensions:', dim(row1_matrix), '
')

Werte anhand eines Index ersetzen

Sie können bestimmte Elemente ändern, indem Sie Indizierung und Zuweisung kombinieren. Das funktioniert für einzelne Elemente, vollständige Zeilen, vollständige Spalten oder Untermatrizen.

m <- matrix(0, nrow = 4, ncol = 4)
cat('Zero matrix:
')
print(m)

# Set diagonal to 5
for (i in 1:4) m[i, i] <- 5
cat('After setting diagonal:
')
print(m)

# Replace entire row 2
m[2, ] <- c(1, 2, 3, 4)
cat('After replacing row 2:
')
print(m)

Lineare (flache) Indizierung

Eine Matrix wird intern als flacher Vektor gespeichert (spaltenweise). Sie können mit einem einzelnen Ganzzahlindex auf Elemente in dieser flachen Reihenfolge zugreifen. Das ist manchmal für Massenoperationen nützlich.

m <- matrix(c(10,20,30,40,50,60), nrow = 2, ncol = 3)
cat('Matrix:
')
print(m)

# Flat indices: column by column
cat('m[1] =', m[1], '(row 1, col 1)
')
cat('m[3] =', m[3], '(row 1, col 2)
')
cat('m[5] =', m[5], '(row 1, col 3)
')

# Replace flat index 4
m[4] <- 99
print(m)

Zusammenfassung der Indizierung

Schnellübersicht zur Matrixindizierung in R:

  • m[r, c] – einzelnes Element in Zeile r, Spalte c
  • m[r, ] – vollständige Zeile r
  • m[, c] – vollständige Spalte c
  • m[c(r1,r2), c(c1,c2)] – Untermatrix
  • m['name', 'name'] – Zugriff über dimname
  • m[-r, ] – Zeile r ausschließen
  • m[logical_vec, ] – logische Zeilenauswahl
  • m[r, , drop=FALSE] – als Matrix beibehalten
m <- matrix(c(5,10,15,20,25,30), nrow = 2, ncol = 3)
cat('m[1,2] =', m[1,2], '
')
cat('m[2,]  =', m[2,], '
')
cat('m[,3]  =', m[,3], '
')
cat('m[-1,] :
'); print(m[-1, ])

Schnelltest

Was gibt m[-2, ] für eine Matrix m mit 3 Zeilen zurück?

Zusammenfassung: Matrixindizierung

Gute Arbeit! Die wichtigsten Erkenntnisse aus dieser Lektion:

  • m[r, c] verwendet zuerst die Zeile, dann die Spalte – beide Positionen werden durch ein Komma getrennt
  • Lassen Sie eine Seite leer (m[r, ] oder m[, c]), um vollständige Zeilen oder Spalten zu extrahieren
  • Negative Indizes schließen Zeilen oder Spalten aus
  • Logische Vektoren können Zeilen oder Spalten filtern
  • Benannte Dimensionen ermöglichen eine besser lesbare Indizierung nach Namen
  • drop = FALSE verhindert den Verlust von Dimensionen beim Extrahieren einzelner Zeilen oder Spalten
# Practical: find best student per subject
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')

for (subj in colnames(scores)) {
  best <- rownames(scores)[which.max(scores[, subj])]
  cat('Best in', subj, ':', best, '
')
}

Häufig gestellte Fragen

Ist die Lektion „Matrixindizierung und Subsetting“ kostenlos?

Ja — der vollständige Text von „Matrixindizierung und Subsetting“ 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 „Matrixindizierung und Subsetting“?

Greifen Sie mithilfe der Notation [row, col] auf Zeilen, Spalten und Elemente zu. 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 „Matrixindizierung und Subsetting“?

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. Matrizen mit matrix() erstellen
  2. Matrixindizierung und Subsetting
  3. Matrixarithmetik und -operationen
  4. Matrizen transponieren und umformen
← Zurück zu R Academy