0Pricing
R Academy · Aula

Indexação e subconjuntos de matrizes

Acesse linhas, colunas e elementos usando a notação [row, col].

Indexação e subconjuntos de matrizes é uma aula grátis de R Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de R Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de R Academy inclui 4 aulas no total.

Noções básicas de indexação de matrizes

Para acessar elementos de uma matriz, use a notação m[row, col]. Os índices de linhas e colunas começam em 1 no R. A vírgula é obrigatória — omiti-la trata a matriz como um vetor simples.

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], '
')

Extraindo uma linha inteira

Deixe o índice da coluna em branco para extrair uma linha inteira. O resultado é um vector (a dimensão da matriz é removida). A vírgula ainda precisa estar presente.

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), '
')

Extraindo uma coluna inteira

Deixe o índice da linha em branco para extrair uma coluna inteira. Assim como na extração de uma linha, o resultado é um vector. A vírgula que separa as posições da linha e da coluna ainda precisa estar presente.

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), '
')

Selecionando várias linhas e colunas

Use um vector de índices para extrair várias linhas ou colunas de uma só vez. O resultado é uma submatriz (ainda uma matriz, não um vector), preservando a estrutura bidimensional.

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), '
')

Acessando por nome de linha/coluna

Se uma matriz tiver nomes de linhas e colunas, você poderá indexá-la pelo nome em vez da posição. Isso torna o código mais legível e resistente à reordenação de linhas ou colunas.

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'])

Indexação lógica em matrizes

Você pode usar um vector lógico (ou uma matriz lógica) para selecionar elementos. Quando um vector lógico é usado em uma dimensão, ele seleciona as linhas ou colunas cujo valor é TRUE.

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)

Indexação negativa — excluindo linhas/colunas

Adicione o prefixo - a um índice para excluir essa linha ou coluna. Essa é uma forma simples de remover linhas ou colunas específicas sem listar todas as outras que você deseja manter.

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)])

Elemento único com drop = FALSE

Por padrão, extrair uma única linha ou coluna remove a dimensão (retorna um vector). Use drop = FALSE para manter o resultado como uma matriz (preservando a estrutura de linhas e colunas).

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), '
')

Substituindo valores por índice

Você pode modificar elementos específicos combinando indexação e atribuição. Isso funciona para elementos únicos, linhas inteiras, colunas inteiras ou submatrizes.

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)

Indexação linear (simples)

Internamente, uma matriz é armazenada como um vector simples (coluna por coluna). Você pode acessar elementos usando um único índice inteiro nessa ordem linear. Isso pode ser útil em algumas operações em bloco.

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)

Resumo da indexação

Referência rápida para indexação de matrizes no R:

  • m[r, c] — elemento único na linha r e coluna c
  • m[r, ] — linha r inteira
  • m[, c] — coluna c inteira
  • m[c(r1,r2), c(c1,c2)] — submatriz
  • m['name', 'name'] — acesso por nome da dimensão
  • m[-r, ] — exclui a linha r
  • m[logical_vec, ] — seleção lógica de linhas
  • m[r, , drop=FALSE] — mantém o resultado como matriz
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, ])

Verificação rápida

O que m[-2, ] retorna para uma matriz m com 3 linhas?

Recapitulação: indexação de matrizes

Ótimo trabalho! Principais aprendizados desta lição:

  • m[r, c] usa primeiro a linha e depois a coluna — ambas as posições são separadas por vírgula
  • Deixe um dos lados em branco (m[r, ] ou m[, c]) para extrair linhas ou colunas inteiras
  • Índices negativos excluem linhas ou colunas
  • Vectores lógicos podem filtrar linhas ou colunas
  • Dimensões nomeadas permitem indexar por nome, tornando o código mais legível
  • drop = FALSE impede a perda de dimensão ao extrair linhas ou colunas únicas
# 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, '
')
}

Perguntas Frequentes

A aula “Indexação e subconjuntos de matrizes” é grátis?

Sim — o texto completo de “Indexação e subconjuntos de matrizes” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de R Academy, atualize para CoddyKit PRO. O curso de R Academy inclui 4 aulas no total.

O que vou aprender em “Indexação e subconjuntos de matrizes”?

Acesse linhas, colunas e elementos usando a notação [row, col]. Você pratica R Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar R Academy?

Nenhuma experiência prévia é necessária. R Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Indexação e subconjuntos de matrizes”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de R Academy?

Sim. Cada aula de R Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Criando matrizes com matrix()
  2. Indexação e subconjuntos de matrizes
  3. Aritmética e operações com matrizes
  4. Transposição e remodelagem de matrizes
← Voltar para R Academy