Fatiamento e Indexação de Vetores
Parte da seção Fundamentos do Journey de R da Coddy — lição 67 de 78.
Você aprendeu como acessar elementos individuais e iterar através de vetores. Agora vamos explorar como extrair múltiplos elementos de uma só vez usando slicing. Esta técnica permite que você obtenha um subconjunto de um vetor em uma única operação.
Para extrair múltiplos elementos, passe um vetor de índices dentro dos colchetes:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)])Saída:
[1] 10 30 50Você também pode usar o operador de dois pontos para selecionar um intervalo de elementos consecutivos:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4])Saída:
[1] 20 30 40Índices negativos são poderosos em R. Eles excluem elementos em vez de selecioná-los:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2])Saída:
[1] 10 30 40 50Você pode excluir múltiplos elementos passando um vetor de índices negativos:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)])Saída:
[1] 20 30 40Lembre-se: você não pode misturar índices positivos e negativos na mesma seleção. O R lançará um erro se você tentar numbers[c(1, -2)].
Desafio
FácilVocê receberá duas linhas de entrada:
- Uma lista de números separados por vírgula (ex:
100,200,300,400,500,600,700) - Dois índices separados por uma vírgula representando um intervalo a ser excluído (ex:
2,5)
Realize as seguintes operações:
- Crie um vetor numérico a partir dos números separados por vírgula
- Imprima os elementos nas posições 1, 3 e 5 usando um vetor de índices
- Imprima os elementos da posição 2 à posição 4 usando o operador de dois pontos (colon operator)
- Imprima o vetor com o elemento no primeiro índice fornecido excluído (usando indexação negativa)
- Imprima o vetor com os elementos do primeiro índice ao segundo índice excluídos (usando indexação negativa com um intervalo)
Por exemplo, se as entradas forem:
10,20,30,40,50,60,70
3,5A saída deve ser:
[1] 10 30 50
[1] 20 30 40
[1] 10 20 40 50 60 70
[1] 10 20 60 70Explicação:
- Elementos nas posições 1, 3, 5 são: 10, 30, 50
- Elementos da posição 2 à 4 são: 20, 30, 40
- Excluir a posição 3 resulta em: 10, 20, 40, 50, 60, 70
- Excluir as posições de 3 a 5 resulta em: 10, 20, 60, 70
Folha de consulta
Para extrair múltiplos elementos de um vetor, passe um vetor de índices dentro de colchetes:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)]) # [1] 10 30 50Use o operador de dois pontos para selecionar um intervalo de elementos consecutivos:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4]) # [1] 20 30 40Índices negativos excluem elementos em vez de selecioná-los:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2]) # [1] 10 30 40 50Exclua múltiplos elementos passando um vetor de índices negativos:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)]) # [1] 20 30 40Importante: Você não pode misturar índices positivos e negativos na mesma seleção.
Experimente você mesmo
# Ler a entrada
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
indices_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# Converter os números separados por vírgula em um vetor numérico
numbers <- as.numeric(strsplit(numbers_input, ",")[[1]])
# Analisar os dois índices
indices <- as.numeric(strsplit(indices_input, ",")[[1]])
idx1 <- indices[1]
idx2 <- indices[2]
# TODO: Escreva seu código abaixo
# 1. Imprimir elementos nas posições 1, 3 e 5 usando um vetor de índices
# 2. Imprimir elementos da posição 2 até a posição 4 usando o operador de dois pontos
# 3. Imprimir o vetor com o elemento no idx1 excluído (indexação negativa)
# 4. Imprimir o vetor com elementos de idx1 a idx2 excluídos (indexação negativa com intervalo)Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
4Operadores Parte 2
Operadores Lógicos (AND, OR)Operadores Lógicos Parte 2 (NOT)Recapitulação - Lógica SimplesLógica Vetorizada Parte 1Lógica Vetorizada Parte 27Calculadora de Divisão de Conta
Mensagem de Boas-vindasObtendo a Entrada do Usuário10FizzBuzz com um Toque Especial
Visão Geral do JogoA Função FizzBuzz13Vetores Avançados
Fatiamento e Indexação de VetoresIndexação LógicaAritmética de Vetores e ReciclagemO Operador %in%2Variáveis e Tipos de Dados
Tipo de Dado NuméricoTipo de Dado InteiroTipo de Dado CaractereTipo de Dado LógicoVerificando Tipos de DadosConvenções de NomenclaturaValores Ausentes: NARecapitulação - Criação de Variáveis8Laços de Repetição
Laço ForLaço WhileBreakNext (Continue)Recapitulação - FatorialGeração de Sequências (seq, :)Laços AninhadosRecapitulação - Entrada Dinâmica3Operadores Parte 1
Operadores AritméticosDivisão Inteira e MóduloOperadores de AtribuiçãoRecapitulação - Matemática SimplesOperadores de Comparação6IO Básico
Saída com PrintCat para SaídaSaída com VariáveisLendo Entrada com readline()Básico de Conversão de TiposRecapitulação - Calculadora de IdadeRecapitulação - Verdadeiro ou Falso9Funções
Declarando uma FunçãoArgumentos de FunçãoValores de RetornoRecapitulação - Função SigmaRecapitulação - Função de ValidaçãoValores de Parâmetro Padrão