Trabalhando com Vetores

Layla Comparin
rladiesbh

--

Aprender a trabalhar com vetores é fundamental para a programação em R. Neste artigo, vamos nos basear nas habilidades que aprendemos no anterior, à medida que nos aprofundamos na criação, manipulação e execução de cálculos com vetores.

No último artigo, aprendemos algumas noções básicas de programação R à medida que analisamos os dados das disciplinas:

Nós calculamos as notas finais para cada disciplina e as atribuímos às variáveis:

matemática  <-  88quimica  <-  87.66667redação <-   86arte  <-  91.33333história  <-  84música  <-  91educação_física <-  89.33333

Então, criamos um vetor de notas finais da turma:

final_scores  <-  c ( matemática , quimica , redação, arte , história , música , educação_física)

Finalmente, usamos a funçãomean()para calcular a média de notas:

mean ( final_scores )

Vimos como é útil trabalhar com vetores e funções para executar rapidamente cálculos em R. Neste artigo, veremos em detalhes a manipulação de vetores para análise de dados:

  • Trabalhando com um subconjunto de valores em um vetor.
  • Atribuindo nomes aos elementos de um vetor.
  • Usando operadores de comparação para responder a perguntas sobre dados armazenados em vetores.

Vamos continuar trabalhando com os dados das notas que introduzimos no artigo anterior. Começaremos investigando como nossas disciplinas STEM (ciência, tecnologia, engenharia e matemática) se comparam às classes não-STEM.

Primeiro, precisamos extrair subconjuntos dos dados armazenados em nosso vetorfinal_scores: classes STEM e classes não-STEM.

Podemos indexar vetores para selecionar um subconjunto dos elementos que eles contêm. Dentro de um vetor, cada elemento tem uma posição. O R é uma linguagem de programação indexada 1, o que significa que o primeiro elemento em um vetor é atribuído a uma posição de um.

Podemos extrair valores do vetor especificando sua posição entre colchetes ( []). Para retornar o valor na terceira posição de final_scores, podemos escrever:

final_scores [ 3 ]

que retorna:

86

Também podemos extrair vários valores de um vetor especificando mais de uma posição. Podemos querer extrair um intervalo de elementos vetoriais, que podemos especificar usando dois pontos ( :). Para selecionar o primeiro até o quarto elemento do vetorfinal_scores, nós escreveríamos:

final_scores [ 1 : 4 ]
Resultado:88.00000 87.66666 86.00000 91.33333

Se quisermos selecionar elementos vetoriais que não estão próximos uns dos outros, podemos especificá-los usando c(). Para selecionar elementos na primeira, terceira e sétima posição do final_scores, nós escreveríamos:

final_scores [ c ( 1 , 3 , 7 )]Resultado:88.00000  86.00000  89.33333

Vamos indexar o final_scores para ver como as classes STEM e não-STEM são comparadas.

Vamos aos exercícios:

  1. Escrever um código para criar um novo vetor stem, contendo apenas as notas finais de matemática e química.
  2. Crie um novo vetor, nstemcontendo as notas finais das outras disciplinas.
  3. Calcule a média de cada vetor e salve seus valores em avg_steme avg_nstem.

Indexamos o vetor final_scores para criar dois novos vetores e calcular a média das notas em cada novo vetor:

stem  <-  final_scores [ c ( 1 , 2 )]nstem  <-  final_scores [ c ( 3 : 7 )]Resultado:mean( stem ) # 87.83334mean( nstem ) # 88.33333

Os resultados do cálculo mostram que as notas são, em média, mais altas nas classes não-STEM neste conjunto de dados.

Quando você indexou o vetorfinal_grades por posição, foi difícil combinar as posições dos elementos com as disciplinas? Como existem apenas sete disciplinas no conjunto de dados, podemos simplesmente nos referir à tabela de dados. No entanto, se houvesse notas para mais disciplinas armazenadas, a indexação por posição se tornaria tediosa.

Atribuir nomes a elementos de um vetor pode facilitar a indexação.

À medida que nos aprofundamos nos elementos de nomeação dos vetores, vamos falar um pouco sobre os tipos de dados contidos nos vetores com os quais estamos trabalhando. No R, existem vários tipos principais de dados. Entender esses tipos diferentes é a chave para fazer o melhor uso da linguagem. Nesta missão, trabalharemos com dados numéricos e de caractere.

Dados numéricos

Neste curso, estamos trabalhando com dados de disciplinas; os dados consistiram inteiramente em números. No R, esse tipo de dado é referido como numérico. Dados numéricos podem incluir dados inteiros ou números inteiros ( 88) e dados duplos ou decimais ( 87.666667).

À medida que começamos a trabalhar com vários tipos de dados, o tipo de dados com o qual estamos trabalhando nem sempre fica claro. Como algumas operações que executamos são úteis apenas para alguns tipos de dados, precisamos ter certeza do tipo com o qual você está trabalhando.

Para exibir o tipo de dados de um vetor, usaremos a typeof()função. Vamos exibir o tipo de dados de final_scores.

typeof ( final_scores )

Isto irá mostrar:

"double"

Dados de caractere

No R, “caracteres” referem-se a todos os símbolos usados ​​para criar um idioma, incluindo letras, caracteres especiais como “%”, “&” ou “$” e números. Algumas funções que você usará para executar cálculos, como min()e max(), não funcionarão nos dados de caractere.

Para criar um vetor contendo dados de caractere, você pode usar a funçãoc() como fez quando adicionou notas ao vetorfinal_scores. No entanto, você precisa especificar que os elementos que você está incluindo consistem em caracteres, colocando-os entre aspas (ou ''ou "").

Para criar um vetor contendo os nomes de duas de suas disciplinas, nós escreveríamos:

matem_quim <-  c ( "matemática" , "quimica" )

Para verificar se o vetor que criamos contém dados de caractere, usaremos a funçãotypeof(), que retorna o tipo de dado de um vetor:

typeof(matem_quim)
Resultado:
"character"

Agora que aprendemos sobre tipos de dados numéricos e de caracteres, vamos voltar a atribuir nomes aos elementos do vetorfinal_scores. Como primeiro passo, vamos criar um vetor de caracteres dos nomes das suas disciplinas.

Vamos aos exercícios:

Crie um vetor de dados de caracteres chamado disciplinascontendo suas disciplinas na seguinte ordem:

  • matemática
  • quimica
  • redação
  • arte
  • história
  • música
  • educação física

Nós criamos agora dois vetores:

  • final_scores, contendo as notas da sua turma (dados numéricos).
  • disciplinas, contendo os nomes das disciplinas (dados dos caracteres).

No R, os vetores podem ter atributos atribuídos a eles. Atributos fornecem informações, como nomes, sobre os valores armazenados no vetor. Para atribuir nomes a elementos vetoriais, podemos usar a funçãonames().

Para ilustrar como usar a funçãonames(), vamos criar dois vetores.

Um vetor contém as notas de matemática e química:

matem_quim <-  c ( 88 , 87.66667 )

O outro contém os nomes das duas disciplinas:

disciplinas <- c("matemática", "quimica")

Para atribuir os valores armazenados como atributos dos valores de notas contidos no vetor matem_quim, escreveríamos:

names(matem_quim) <- disciplinas

Agora, se digitarmos matem_quim, o R retornará:

matemática    quimica 
88.00000 87.66667

Também podemos usar a funçãonames() para retornar os nomes dos elementos em um vetor. Se digitarmos:

names(matem_quim)

O R retorna os nomes que você atribuiu aos elementos de matem_quim:

"matemática"    "quimica"

Se tentarmos aplicar a funçãonames() a um vetor sem nomes atribuídos a seus elementos, o R retornará NULL.

Vamos atribuir o nome da turma a cada nota do seu vetor final_scores.

Vamos aos exercícios:

Use o vetordisciplinaspara atribuir nomes aos elementos do vetorfinal_scores.

Agora atribuímos os nomes aos elementos do vetorfinal_scores:

Anteriormente, aprendemos a indexar vetores usando as posições dos elementos que queríamos extrair. Agora que atribuímos nomes aos elementos do vetor, podemos indexar usando os nomes .

Vamos voltar ao vetormatem_quim. Atribuímos nomes às notas contidas neste vetor:

matem_quimResultado:matemática    quimica 
88.00000 87.66667

Se quisermos retornar a pontuação na aula de química, podemos indexar matem_quimpelo nome da classe quimica:

Lembre-se, como os atributos de nomes consistem em dados de caractere, “química” precisa estar entre aspas.

A indexação do vetormatem_quimpelo nome quimicaretorna a nota ( 87.66667). Nós obteríamos o mesmo resultado se indexássemos por posição.

Assim como na indexação por posição, podemos indexar por nome para retornar vários elementos usando c():

Vamos indexar o vetorfinal_scores pelo nome conforme analisamos um subconjunto das classes.

No início deste artigo, calculamos as médias das notas nas classes STEM e não STEM. Agora, estamos interessados ​​em comparar as notas médias em suas artes plásticas (arte, música) e artes liberais (redação, história).

Vamos aos exercícios:

Indexar o vetor final_scorespelo nome para criar dois novos vetores:

  • artes_liberais: Contendo suas notas finais de redação e história.
  • artes_plásticas: Contendo suas notas finais de arte e música.

Calcule a média de cada novo vetor.

Agora, indexamos o vetorfinal_scorespara comparar visualmente as médias das notas em alguns subconjuntos de classes:

  • STEM vs. não-STEM
  • Artes liberais vs. Artes Plásticas

Esse método funcionou bem com o pequeno conjunto de dados com o qual estamos trabalhando, mas há outros métodos que serão dimensionados com mais eficácia à medida que nossos conjuntos de dados aumentam em tamanho e complexidade.

Em vez de comparar visualmente pares de notas, podemos escrever um código usando operadores de comparação para comparar valores com base em condições específicas, como “maior que”, “menor que” ou “igual a”.

Quando comparamos dois valores usando um operador de comparação, se os valores satisfizerem a condição, o interpretador R retornará TRUE. Se os valores não satisfizerem a condição, o interpretador R retornará FALSE.

Abaixo, ilustramos uma comparação de sua nota final de matemática ( 88) com sua nota de química ( 87.6667) usando todos os operadores de comparação:

Esses valoresTRUEe FALSE são de outro tipo de dados no R: booleano ou lógico . O tipo de dados lógico só pode consistir em dois valores TRUEe FALSE.

Para responder à pergunta: “Consegui uma nota melhor em química do que em matemática?” você poderia escrever:

matem_quim [ "quimica" ] >  matem_quim [ "matemática" ]

Essa expressão retorna FALSE, já que a sua nota de química é realmente menor do que a sua nota de matemática.

Vamos usar operadores de comparação para responder a mais perguntas sobre as notas finais.

Vamos aos exercícios:

Escreva uma expressão usando um operador de comparação para responder à pergunta: A média de notas finais de artes liberais é maior que a média das notas finais de artes plásticas?

Para resolver este exercício, escrevemos uma expressão usando um operador de comparação para ver se a nota média de artes liberais é maior:

mean ( artes_liberais) >  mean ( artes_plásticas) # FALSE

Agora, vamos fazer uma pergunta diferente: “A nota final de matemática é maior que a nota das minhas outras aulas?”

A sintaxe em R faz essa comparação simples para escrever uma expressão para:

final_scores [ "matemática" ] >  final_scores

A saída consiste em comparações da nota de matemática com as outras classes:

Para entender por que esse código resulta na saída mostrada acima, precisamos entender como o R trabalha com vetores de diferentes comprimentos. Ao comparar o grau de matemática (um vetor contendo um único valor) a um vetor contendo todos os graus, o R replica o vetor mais curto até que tenha o mesmo comprimento que o vetor mais longo. Em seguida, ele executa a operação, conforme ilustrado abaixo:

Veremos exemplos mais detalhados desse comportamento em algumas telas.

Como os dados numéricos e de caracteres, os dados lógicos podem ser armazenados em vetores. Se quisermos armazenar os resultados da comparação da nota de matemática com as outras notas como uma variável chamada matem_compare, podemos escrever:

matem_compare  <-  final_scores [ "matemática" ] >  final_scores

Se, em seguida, usarmos a funçãotypeof() para verificar o tipo de dados de matem_compare, a saída nos informará que o tipo de dados é logical:

Vamos descobrir como cada nota de classe se compara à média de notas.

Vamos aos exercícios:

  1. Use a funçãomean() para calcular a média de pontos a partir de final_scores. Armazene isso em uma variável nomeada gpa.
  2. Compare final_scorescom gpapara ver se a nota em cada disciplina é maior que o gpa. Armazene a saída lógica em um vetor chamado maiorque_avg.

Nós agora criamos um vetor lógico maiorque_avg, que nos diz se cada uma das notas é mais alta que o gpa:

As notas de arte, música e educação física foram maiores que a média de notas. E se quisermos criar um novo vetor contendo apenas notas das classes em que sua nota foi maior que seu gpa?

Nos exercícios anteriores, indexamos por posição e por nome . Aqui, introduziremos um novo tipo de indexação chamada de indexação lógica .

A indexação lógica irá comparar cada valor em um vetor de destino com o valor correspondente em um vetor lógico.

  • Se o valor correspondente for TRUE, o vetor resultante conterá esse valor.
  • Se o valor correspondente for FALSE, o vetor resultante não conterá esse valor.

No início deste artigo, comparamos a nota de matemática com as notas de outras turmas para ver se ela era mais alta. Vamos armazenar o resultado dessa comparação em um vetor de valores lógicos:

logical_vector  <-  final_scores [ "matemática" ] >  final_scores

Podemos agora indexar final_scoresusandological_vector. Isso nos permitirá criar um novo vetor contendo apenas notas de disciplinas inferiores à nota de matemática:

final_scores [ logical_vector ]

Vamos usar a indexação lógica para criar um vetor contendo apenas disciplinas com notas mais altas que o GPA.

Vamos aos exercícios:

  1. Ao indexar maiorque_avgem final_scores, crie um novo vetor chamado thebestque contenha somente disciplinas com notas mais altas que o seu GPA.

Agora aprendemos a executar operações em vetores únicos. Freqüentemente, usaremos operações de vetor único, como calcular a média de valores (ou um subconjunto de valores) em um vetor, conforme analisamos dados.

Para o restante deste artigo, aprenderemos a usar um recurso muito poderoso do R: a capacidade de executar operações aritméticas em todos os elementos de vários vetores de uma só vez.

Ao ilustrar como isso funciona, vamos considerar um exemplo.

Você tem progredido bastante aprendendo a usar o R ​​para escrever programas para analisar suas notas. Seus amigos notaram seu bom trabalho e expressaram interesse em usar seu programa para calcular suas notas finais também.

Sua amiga, Maria, que tem as mesmas aulas que você este ano, te enviou um e-mail com todos as suas provas, exercícios e notas do projeto no seguinte formato:

  • Provas: 76, 89, 78, 88, 79, 93, 89
  • Exercícios: 85, 90, 88, 79, 88, 95, 74
  • Projetos: 77, 93, 87, 90, 77, 82, 80

Maria é um pouco desorganizada, mas ela garante que as notas estão listadas na mesma ordem para cada categoria de atribuição:

  • matemática, química, redação, arte, história, música, educação_física

Você começa criando três vetores, um para cada categoria de atribuição, para trabalhar com:

provas  <-  c ( 76 , 89 , 78 , 88 , 79 , 93 , 89 )
exercícios <- c ( 85 , 90 , 88 , 79 , 88 , 95 , 74 )
projetos <- c ( 77 , 93 , 87 , 90 , 77 , 82 , 80 )

Primeiro, Maria gostaria de ajudar a calcular as pontuações finais de cada aula. Você pode calcular cada disciplina individualmente:

matemática  <- ( 76  +  85  +  77 ) / 3química  <- ( 89  +  90  +  93 ) / 3  # etc.

No entanto, você está aprendendo a usar o R ​​com conjuntos de dados maiores. Em vez de calcular cada nota final, você pode usar a aritmética vetorial para realizar esses cálculos.

A aritmética vetorial é semelhante à aritmética que você realizou para fazer cálculos usando valores individuais no início do curso. Ao realizar aritmética em vetores, as operações são realizadas entre os valores em ordem de posição.

Para ilustrar como a adição de dois vetores juntos funciona, vamos adicionar os vetores exercíciose provas e salvar a saída como um novo vetor chamado soma:

soma  <-  provas  +  exercícios

A operação e o vetor resultante se pareceriam com:

Vamos usar a aritmética vetorial para calcular as notas finais de Maria em cada aula.

Vamos aos exercícios:

  1. Calcule as médias de Maria para cada disciplina, adicionando os vetoresprovas, exercíciose projetos e dividindo por 3.
  2. Armazene o vetor resultante em uma variável nomeada notas_maria.
  3. Use a funçãomean() para calcular a média de notas de Maria a partir da variávelnotas_maria.

No exemplo anterior, calculamos as pontuações de Maria fazendo aritmética vetorial. Nesse cenário, os três vetores com os quais estamos trabalhando eram do mesmo tamanho. Cada um tinha sete valores para as sete disciplinas que Maria fez. Este não é sempre o caso, no entanto. Por exemplo, e se Maria se esquecer de lhe dar uma nota de exercício para uma das disciplinas?

Anteriormente neste artigo, vimos que sempre que há uma incompatibilidade no comprimento de dois vetores que você está comparando, o vetor mais curto é reciclado (ou repetido) até corresponder ao comprimento do vetor mais longo. Vamos aprender mais sobre esse recurso de trabalhar com vetores no R.

Para ilustrar como o comportamento de reciclagem do R funciona quando realizamos operações em vetores de diferentes comprimentos, vamos encurtar seu vetor de exercícios para apenas dois valores:

provas  <-  c ( 76 , 89 , 78 , 88 , 79 , 93 , 89 )exercícios  <-  c ( 85 , 90 )

O R determinará que o vetorexercíciosé mais curto que o vetorprovas e reciclará automaticamente os valores no vetorexercício até que os dois vetores tenham o mesmo comprimento:

Quando os comprimentos de vetor coincidirem, o R executará a operação aritmética especificada.

Quando executamos operações em vetores de comprimentos desiguais no R, receberemos a seguinte mensagem de aviso:

Mensagem de aviso :Em  provas + exercícios :comprimento de objeto  mais longo  não é  um múltiplo de comprimento de objeto mais curto

O R ainda executará o cálculo. A mensagem de aviso destina-se a alertar-nos para a possibilidade de que os diferentes comprimentos de vetor não foram planejados.

Vamos voltar ao nosso cenário de escrever programas para calcular as notas dos seus amigos. Você tem uma amiga muito desorganizada, Kate, que fornece dados incompletos: ela está perdendo médias de prova para quatro de suas disciplinas. Vamos ver o que acontecerá se você tentar calcular suas notas como fez para Maria.

Vamos aos exercícios:

Aqui estão as notas das provas de Kate, assim como os exercícios e notas do projeto:

  • Provas: 76, 89, 78
  • Exercícios: 85, 90, 88, 79, 88, 95, 74
  • Projetos: 77, 93, 87, 90, 77, 82, 80

Calcule a soma das notas das provas de Kate, exercícios e notas do projeto e armazene o vetor resultante como uma variável nomeada recycling. Observe a mensagem de aviso resultante.

Você calculou a soma dos vetores de provas, exercícios e projetos de Kate, apesar de saber que os dados que ela forneceu estavam incompletos. Embora o R reciclasse o vetorprovas incompleto e calculasse uma nota média para cada disciplina, essas médias não refletem com precisão a nota de Kate.

Felizmente, enquanto limpava seu quarto, Kate encontrou as quatro provas que faltavam e conseguiu lhe dar as notas:

  • 88
  • 79
  • 93
  • 89

Em vez de redigitar o vetorprovas, você pode adicionar as pontuações das provas da Kate a ele.

Lembre-se que anteriormente no curso usamos a funçãoc() para criar vetores:

provas  <-  c ( 76 , 89 , 78 )

Para adicionar elementos adicionais a um vetor, você pode usar c()para criar um novo vetor que consiste no vetor existente mais os novos elementos que você deseja adicionar a ele:

provas  <-  c ( provas , 99 , 67 )

Kate pediu-lhe para ajudá-la a descobrir quais de suas aulas eram mais fracas para que ela pudesse melhorar. Vamos adicionar os resultados das provas de Kate ao vetorprovas e ajudá-la a descobrir quais de suas disciplinas precisam de mais esforço.

Este exercício tem várias etapas e deve ser um desafio. Prepare-se para mostrar tudo o que você aprendeu neste curso até agora!

Vamos aos exercícios:

  1. Adicione o restante das notas das provas de Kate ( 88, 79, 93, 89) ao vetor provas. Salve o novo vetor contendo todas as notas de Kate como provas, o que sobrescreverá a variávelprovasincompleta .
  2. Use o vetor aritmético para calcular a média final de Kate para cada disciplina dos vetoresprovas, exercíciose projetos. Salve o vetor resultante como notas_kate.
  3. Atribuir nomes de classes aos elementos de notas_kate.
  4. Calcule o gpa de Kate de notas_kate, use a função mean() e salve o resultado como uma variável nomeada kate_gpa.
  5. Use operadores de comparação e indexação lógica para criar um novo vetor notas_baixas_kate, contendo notas finais para as disciplinas em que Kate obteve uma nota inferior a kate_gpa.

Neste artigo, aprendemos a criar, manipular, adicionar atributos, indexar e executar cálculos usando vetores. Os vetores são uma estrutura de dados chave no R, e as habilidades que aprendemos nesta missão serão aquelas sobre as quais construímos à medida que começarmos a analisar dados mais complexos.

Neste link, você encontrará um resumo do que aprendeu até agora: Uma lista útil de “tópicos” para os quais você deve pegar como base ao continuar aprendendo R.

No próximo artigo, vamos nos aprofundar na análise enquanto trabalhamos com dados do mundo real sobre rankings universitários. Agora que aprendemos as noções básicas de como trabalhar com vetores, expandiremos nossos recursos do R à medida que trabalhamos com estrutura de dados bidimensionais: matrizes.

E não esqueça, a partir desse semestre, iremos promover 3 cursos gratuitos sobre R, sendo eles Introdutório, Intermediário e Básico. :) As datas já foram divulgadas e as inscrições serão abertas no dia 01 de agosto no sympla.com.br/rladiesbh.

Acompanhem nossas redes:

https://www.instagram.com/rladiesbh/

https://twitter.com/rladiesbh

https://www.facebook.com/rladiesbh

--

--

Layla Comparin
rladiesbh

Engenheira de Dados por profissão, confeiteira e dançarina por amor ♥️