R - Principais Estruturas

  • Vetores
  • Matrizes
  • Data Frame
  • Listas
  • Factor

R - O básico

R - primeiro passo

  • abra o RStudio
  • crie um script (File > New File > R Notebook)
  • para criar um chunk, use o atalho > Ctrl + Alt + i

R - Como uma calculadora

> 
> 5 + 3 - 4
## [1] 4
> 
> 
> 5 ^ 20 * 2 ^ 20
## [1] 1e+20

R - Objetos

  • São estruturas de dados para armazenamento em memória

R: Criando objetos

> # Criando objetos
> a = 3 + 2
> b = 3
> 
> a
## [1] 5
> print(a)
## [1] 5

R: Criando um objeto de objetos

> # Criando objetos
> c = a + b
> 
> c
## [1] 8
> print(c)
## [1] 8

R: Criando e Destruindo objetos

> # Criando objetos
> d = pi
> d
## [1] 3.14
> # Destruindo objetos (um novo valor)
> d = 25
> d
## [1] 25

R: Removendo um objeto (Apagando)

> 
> d = 223
> d
## [1] 223
> # Apagando o objetos 
> rm(d)
> 

R: Criando e Destruindo objetos

  • os objetos também são chamados de variáveis
  • os nomes de objetos se diferenciam com letras maiúsculas e minúsculas - case sensitive
  • os nomes devem começar com uma letra
  • os nomes não podem conter espaço e/ou caracteres especiais @,#,&,…

R: Tipos de Variáveis (modo da variável)

  • Numéricas (numeric): Números inteiros ou reais, como idade, renda, número de filhos

  • Datas (Date): São um tipo especial de variável numérica

  • Texto (character): Características puramente individuais que não podem ser utilizadas para categorizar os indivíduos

  • Booleanas (logical): valores podem ser VERDADEIRO ou FALSO

Exemplos em R - numeric

> r_num = 1 / 10 ^ 7
> r_num
## [1] 1e-07
> mode(r_num) # usar class() para saber o tipo da variavel
## [1] "numeric"
> 
> pi
## [1] 3.14
> mode(pi)
## [1] "numeric"

Exemplos em R - character

> # caracter
> name ="Maria"
> mode(name)
## [1] "character"

Exemplos em R - logical

> r_bool = TRUE # Logical
> r_bool
## [1] TRUE
> mode(r_bool)
## [1] "logical"

R: Tipos de armazenamento de uma Variáveis(typeof)

  • A maioria só tem um tipo de armazenamento

  • Se for logical, então o tipo é logical

  • Se for character, então o tipo é character

  • Se for numeric, então o tipo pode ser integer ou double

Operadores Matemáticos

Operador Descrição
\(+\) soma
\(-\) subtração
\(/\) divisão
\(*\) multiplicação
\(\wedge\) potência
\(\%\%\) resto da divisão
\(\%/\%\) inteiro da divisão

Exemplos em R - expressões

> 3 + 1 * 6 - 1 ^ 2
## [1] 8
> 
> (1 + (2 * 3)) * 5
## [1] 35

Exemplos em R - divisão

> 7 / 2
## [1] 3.5
> 7 %/% 2
## [1] 3
> 7 %% 2
## [1] 1

Operadores de Comparação e Lógicos

Operador Descrição
\(==\) igual a
\(!=\) diferente de
\(!\) negação
\(>\) maior que
\(<\) menor que
\(>=\) maior ou igual a
\(<=\) menor ou igual a
\(\&\) e
\(|\) ou

Exemplos em R - maior/menor

> 3 > 2
## [1] TRUE
> 5 < 2
## [1] FALSE

Exemplos em R - igualdade

> 
> 2 == 2
## [1] TRUE
> 2 != 2
## [1] FALSE

Exemplos em R - e/ou

> 
> (6 > 5) & (7 > 8)
## [1] FALSE
> 
> (6 > 5) | (7 > 8)
## [1] TRUE

Inf - infinity

  • Inf / -Inf : Infinito
> Inf+1
## [1] Inf

NaN - not a number

  • NaN: “not a number”, o valor não pode ser calculado
> Inf / Inf
## [1] NaN

NA - not avaible

  • NA :
> NA + 1
## [1] NA
> NA | TRUE # operação ou
## [1] TRUE

Funções no R

  • os “comandos” no R são funções (programas)

\[ <function\; name>(<arg1>, <arg2>, ...)\]

  • arg1, arg2,… são os argumentos da função
  • alguns argumentos são obrigatórios
  • nome do argumento e posição (ordem)
  • informações detalhadas de uma função use o help: \(?<nome\_da\_função>\)

Funções especiais para números especiais

Função Descrição
\(is.inf(x)\) x é Inf?
\(is.nan(x)\) x é NaN?
\(is.na(x)\) x é NA?

Testa NA

> a = NA
> is.na(a)
## [1] TRUE

Funções Matemáticas

Função Descrição
\(abs(x)\) valor absoluto
\(sqrt(x)\) raiz quadrada
\(ceiling(x)\) menor inteiro maior ou igual a \(x\)
\(floor(x)\) maior inteiro menor ou igual a \(x\)
\(trunc(x)\) parte inteira
\(round(x, digits=n)\) arredondamento com n dígitos
\(cos(x), sin(x), tan(x)\) Cosseno, seno e tangente
\(acos(x), cosh(x), acosh(x)\) arco_cosseno, arco_seno e arco_tangente
\(log(x)\) logarítmo natural
\(exp(x)\) exponencial

valor absoluto

> abs(-10.3)
## [1] 10.3

raiz quadrada

> sqrt(36) 
## [1] 6

Menor inteiro maior ou igual ao o argumento

> ceiling(2.88)
## [1] 3
> ceiling(2.1)
## [1] 3
> ceiling(2)
## [1] 2

Maior inteiro menor ou igual ao argumento

> floor(2.88)
## [1] 2
> floor(2.1)
## [1] 2
> floor(2)
## [1] 2

Parte inteira

> trunc(2.88)
## [1] 2
> trunc(2.01)
## [1] 2

Arredondamento com n dígitos

> round(2.88, digits=1)
## [1] 2.9
> round(2.88, digits=0)
## [1] 3
> round(2.1, digits=0)
## [1] 2

Cosseno, Seno e Tangente

> cos(pi) #ângulo em radianos
## [1] -1
> sin(pi/2)
## [1] 1

arco_cosseno, arco_seno e arco_tangente

> acos(-1)
## [1] 3.14

logarítmo

> log(10)
## [1] 2.3
> log(10,base=10)
## [1] 1

exponencial

> exp(1)
## [1] 2.72

Exercícios_01

  1. Calcule a área de uma circunferência de raio 337 (\(A=\pi r^2\))
  2. Qual a raiz quadrada de 3976?
  3. Crie um objeto, \(a\), com o valor 10, e outro, \(b\) com o 30.
  4. Execute uma função que teste se \(a\) é menor que o logaritmo (base 10) de \(b\).
  5. Execute uma função que teste se \(a\) NÃO é igual a \(b\) elevado ao quadrado e dividido por \(a\) menos 1.
  6. Crie um objeto com nome nota média e atribua valor 10.
  7. Se a = NA e b = 10, calcule: \(a^2\), \(a^0\), \(a+b\). Explique os resultados.

Soluções da Lista de Exercícios R - O Básico

Solução_1.01

Calcule a área de uma circunferência de raio 337

\[ A = \pi \cdot r^2\]

> r = 337
> A = pi * r ^ 2
> A
## [1] 356788

Retorna

Solução_1.02

Qual a raiz quadrada de 3976?

> sqrt(3976)
## [1] 63.1

Retorna

Solução_1.03

Crie o objeto a com o valor 10, b com o 30

> a = 10
> b = 30

Retorna

Solução_1.04

Execute uma função que teste se \(a\) é menor que o logaritmo (base 10) de \(b\)

> a < log(b,base=10)
## [1] FALSE

Retorna

Solução_1.05

Execute uma função que teste se \(a\) NÃO é igual a \(b\) elevado ao quadrado e dividido por \(a\) menos 1.

> a != b ^ 2 / a - 1
## [1] TRUE

Retorna

Solução_1.06

Crie um objeto com nome nota média atribua valor 10

> #nota media=10 #não funciona
> # usar "_" ou "." para conectar as palavras
> nota_media = 10
> nota.media = 10
> 
> #nota%media=10 #não funciona

Retorna

Solução_1.07

Se a = NA e b = 10, calcule: \(a^2\), \(a^0\), \(a+b\). Explique os resultados.

> a = NA
> b = 10
> # NA - Not Available/ Missing Values
> a^2 # NA^2=NA
## [1] NA
> a^0 # NA^0=1 - X^0 é 1 para qualquer valor de X (mesmo NA!)
## [1] 1
> a+b # NA + qualquer número é sempre NA
## [1] NA

Retorna

Vetores

Vetores

  • É uma seqüências ordenada de elementos de mesmo modo
  • modo -> {character, numeric, logic, Date}

Criando Vetores

  • Criando vectores com valores predeterminados - c()
> # criação: função é c(), abreviatura de 
> #                                  concatenate
> # vetor de caracter
> names = c("Ana", "Lisa", "Paula", "Carlos")
> #criação de um vetor de números
> ages = c(21, 15, 34, 30, 54, 44, 34)
> names
## [1] "Ana"    "Lisa"   "Paula"  "Carlos"
> ages
## [1] 21 15 34 30 54 44 34

Vetor: Sequencia de Inteiros

> x_int = 1:10

Vetor: Sequencia numérica regular

> x_num1 = seq (1, 10, by = 0.5)
> x_num1
##  [1]  1.0  1.5  2.0  2.5  3.0  3.5  4.0
##  [8]  4.5  5.0  5.5  6.0  6.5  7.0  7.5
## [15]  8.0  8.5  9.0  9.5 10.0
> 
> x_num2 = seq(1, 10, length = 15)
> x_num2
##  [1]  1.00  1.64  2.29  2.93  3.57  4.21
##  [7]  4.86  5.50  6.14  6.79  7.43  8.07
## [13]  8.71  9.36 10.00

Comprimento do Vetor

> length(x_num2)
## [1] 15

Selecionando elementos de um Vetor

> ages
## [1] 21 15 34 30 54 44 34
> ages[3] # obtendo o valor da posição 3
## [1] 34
> ages[3:6] # obtendo os valor da posição 3 a 6
## [1] 34 30 54 44
> # obtendo os valores em posições específicas
> ages[c(2, 4, 5)] 
## [1] 15 30 54

Excluindo elementos de um Vetor

> ages
## [1] 21 15 34 30 54 44 34
> # excluindo o valor da posição 3
> ages[-3] 
## [1] 21 15 30 54 44 34
> # excluindo os valor da posição 2 a 5
> ages[-(2:5)]
## [1] 21 44 34
> # excluindo os valores em posições específicas
> ages[-c(2, 4, 5)] 
## [1] 21 34 44 34

Substituindo elementos de um Vetor

> ages
## [1] 21 15 34 30 54 44 34
> # substituindo  o valor da posição 3
> ages[3] = 99 
> #obtendo os valores em posições específicas
> ages[c(2, 4)] = c(98, 100) 

Operações com vetor

> # gera a sequencia somando 1 
> 1:5 + 1 
## [1] 2 3 4 5 6
  • o R executa a operação repetindo os valores do menor elemento até coincidir com o maior.

Recycling Rule

  • o R executa uma operação reutilizando os valores do menor elemento até coincidir com o maior. (gera um warnnig)
> 1:5 + 1:3 
## Warning in 1:5 + 1:3: comprimento
## do objeto maior não é múltiplo do
## comprimento do objeto menor
## [1] 2 4 6 5 7

Acrescentando um valor

> # acrescentando valores em ages
> ages
## [1]  21  98  99 100  54  44  34
> ages = c(ages, 15)
> ages
## [1]  21  98  99 100  54  44  34  15

Ordenando Vetores

> ages
# [1]  21  98  99 100  54  44  34  15
> # ordena os elementos
> sort(ages)  
# [1]  15  21  34  44  54  98  99 100

Permutação que ordena o vetor

> # um vetor 
> x= c(7,2,4)
> x
## [1] 7 2 4
> 
> # permutação que ordena o vetor
> # são as posições no vetor x
> order(x)
## [1] 2 3 1

Permutação que ordena o vetor

> ages
## [1]  21  98  99 100  54  44  34  15
> p_ord = order(ages)
> p_ord
## [1] 8 1 7 6 5 2 3 4
> ages[p_ord] #ordena ages pelo ordem de names
## [1]  15  21  34  44  54  98  99 100

Exercícios_02

  1. Crie uma sequencia regular de valores entre 0 e 3 a cada 0.25. Solução
  2. Crie outro vetor com uma sequencia de 1 a 3 com 20 elemento. Faça a subtração do vetor da questão 1 e do vetor que acabou de criar. Solução
  3. No vetor resultante no item 2, qual a posição do menor e do maior valor?Solução
  4. Ordene o vetor do item 2 e separe em dois objetos os 3 menores e os 3 maiores valoresSolução
  5. Rearranje o vetor x = 1:30 de forma que o novo vetor inicie com os valores das posições 25 e 29 e termine como os valores da posições 15 a 22. Solução
  6. Ordene o vetor do item 2 de forma decrescente. Solução

Exercícios_02 - continuação

  1. Crie um vetor de tamanho 20, onde todos os elementos tem valor 25.Solução

  2. Crie um vetor de tamanho 20, onde os 8 primeiros tem valor 20 e os demais valor 37.Solução

  3. Crie um vetor tamanho 7 com valores na sequencia 3,7,11.Solução

Soluções da Lista de Exercícios R - Vetores

Solução_2.01

  1. Crie uma sequência regular de valores entre 0 e 3000 a cada 0.25.
> e1 = seq(0, 3, by = 0.25)
> e1[1:5]
## [1] 0.00 0.25 0.50 0.75 1.00

Retorna

Solução_2.02

Crie outro vetor com uma sequencia de 1 a 3 com 20 elemento. Faça a subtração do vetor da questão 1 e do vetor que acabou de criar.

> e2 = seq(1, 3, length = 20)
> e2[1:5]
## [1] 1.00 1.11 1.21 1.32 1.42
> e12 = e1 - e2 #vetores com tamanhos diferentes
## Warning in e1 - e2: comprimento
## do objeto maior não é múltiplo do
## comprimento do objeto menor
> e12[1:5]
## [1] -1.000 -0.855 -0.711 -0.566 -0.421

Retorna

Solução_2.03

  1. No vetor resultante no item 2, qual a posição do menor e do maior valor?
> 
> # posição do menor
> order(e12)[1]
## [1] 14
> 
> # posição do maior
> order(e12)[length(e12)]
## [1] 13

Retorna

Solução_2.04

  1. Ordene o vetor do item 2 e separe em dois objetos os 3 menores e os 3 maiores valores
> N = length(e12)
> e12_maiores = sort(e12)[(N - 2):N]
> e12_maiores
## [1] 0.447 0.592 0.737
> e12_menores = sort(e12)[1:3]
> e12_menores
## [1] -2.37 -2.22 -2.08

Retorna

Solução_2.05

  1. Rearranje o vetor x = 1:30 de forma que o novo vetor inicie com os valores das posições 25 e 29 e termine como os valores da posições 15 a 22.
> x=1:30
> e5 = x[c(25, 29, 
+        (1:length(x))[-c(25, 29, 15:22)], 15:22)]
> e5
##  [1] 25 29  1  2  3  4  5  6  7  8  9 10
## [13] 11 12 13 14 23 24 26 27 28 30 15 16
## [25] 17 18 19 20 21 22

Retorna

Solução_2.06

  1. Ordene o vetor do item 5 de forma decrescente.
> e6=sort(e5, decreasing = TRUE)
> e6
##  [1] 30 29 28 27 26 25 24 23 22 21 20 19
## [13] 18 17 16 15 14 13 12 11 10  9  8  7
## [25]  6  5  4  3  2  1

Retorna

Solução_2.07

  1. Crie um vetor de tamanho 20, onde todos os elementos tem valor 25.
> e7=rep(25,20)
> e7
##  [1] 25 25 25 25 25 25 25 25 25 25 25 25
## [13] 25 25 25 25 25 25 25 25

Retorna

Solução_2.08

  1. Crie um vetor de tamanho 20, onde os 8 primeiros tem valor 20 e os demais valor 37.
> e8=rep(c(12,4,13,33,121), length=240)
> length(e8)
## [1] 240

Retorna

Solução_2.09

  1. Crie um vetor tamanho 7 com valores na sequencia 3,7,11.
> e9=rep(c(3,7,11),7)
> e9
##  [1]  3  7 11  3  7 11  3  7 11  3  7 11
## [13]  3  7 11  3  7 11  3  7 11

Retorna

Matrizes

Matrizes

  • disposição bidimensional (linhas e colunas)
  • os elementos devem ser todos de um mesmo tipo(numéricos, caracteres, …)

Criando uma Matriz

> ms = matrix(0, nrow = 2, ncol = 3) 
> ms
##      [,1] [,2] [,3]
## [1,]    0    0    0
## [2,]    0    0    0

Criando uma Matriz

> # criação
> x = c(2, 4, 3, 5, 6, 7, 6, 8, 7)
> nc = 3
> ms = matrix(x, ncol = nc, byrow = TRUE)
> ms
##      [,1] [,2] [,3]
## [1,]    2    4    3
## [2,]    5    6    7
## [3,]    6    8    7

Dimensão da matriz

> dim(ms)
## [1] 3 3
> ncol(ms)
## [1] 3
> nrow(ms)
## [1] 3
  • o resultado refer-se ao número de linhas e colunas (nesta ordem)

Selecionando elementos da matriz

> # elemento da linha 1 e coluna 3
> ms[1, 3] 
## [1] 3
> 
> # elementos da linha 2 e coluna 2 e 3
> ms[2, c(2, 3)]
## [1] 6 7

Selecionando elementos da matriz

  • para selecionar uma dimensão inteira, deixe sem valor
> # todos os elemento da  coluna 3
> ms[, 3] 
## [1] 3 7 7
> 
> # todos os elemento da  linha 2
> ms[2, ]
## [1] 5 6 7

Substituindo valores

> ms[2, 3] = 10
> ms[2, ] = c(7, 7, 7)
> ms
##      [,1] [,2] [,3]
## [1,]    2    4    3
## [2,]    7    7    7
## [3,]    6    8    7

Adicionando Colunas

> # adicionando nova coluna
> ms = cbind(ms, c(3, 3, 3)) 
> ms
##      [,1] [,2] [,3] [,4]
## [1,]    2    4    3    3
## [2,]    7    7    7    3
## [3,]    6    8    7    3

Adicionando Linhas

> # adicionando nova linha
> ms = rbind(ms, c(1, 1, 1, 1)) 
> ms
##      [,1] [,2] [,3] [,4]
## [1,]    2    4    3    3
## [2,]    7    7    7    3
## [3,]    6    8    7    3
## [4,]    1    1    1    1

Combinando matrizes por Colunas

> m = matrix(2, 2, 3)
> m
##      [,1] [,2] [,3]
## [1,]    2    2    2
## [2,]    2    2    2
> cbind(m, m) # novas colunas
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    2    2    2    2    2    2
## [2,]    2    2    2    2    2    2

Combinando matrizes por linhas

> m = matrix(2, 2, 3)
> m
##      [,1] [,2] [,3]
## [1,]    2    2    2
## [2,]    2    2    2
> rbind(m, m) # novas linhas
##      [,1] [,2] [,3]
## [1,]    2    2    2
## [2,]    2    2    2
## [3,]    2    2    2
## [4,]    2    2    2

Operações com Matrizes

> ms * 2 # recycling rule
##      [,1] [,2] [,3] [,4]
## [1,]    4    8    6    6
## [2,]   14   14   14    6
## [3,]   12   16   14    6
## [4,]    2    2    2    2

Produto Matricial

> ms %*% t(ms) # produto matricial
##      [,1] [,2] [,3] [,4]
## [1,]   38   72   74   12
## [2,]   72  156  156   24
## [3,]   74  156  158   24
## [4,]   12   24   24    4

Identificando linhas e colunas

  • \(dimnames()\)
> m=matrix(NA,2,2)
> m # sem nomes em linhas e colunas
##      [,1] [,2]
## [1,]   NA   NA
## [2,]   NA   NA
> dimnames(m)=list(c("A","B"),c("a","b"))
> m
##    a  b
## A NA NA
## B NA NA

Identificando linhas e colunas

  • \(colnames()\)
  • \(rownames()\)
> m=matrix(NA,2,2)
> rownames(m)=c("A","B")
> colnames(m)=c("a","b")
> m
##    a  b
## A NA NA
## B NA NA

Resumo de Funções

  • \(c(object,object,...)\): combine objects into a vector
  • \(length(object)\): number of elements or components
  • \(class(object)\): class or type of an object
  • \(names(object)\): names
  • \(rownames() / colnames()\): nomes de linhas e colunas
  • \(cbind(object, object, ...)\): combine objects as columns
  • \(rbind(object, object, ...)\): combine objects as rows
  • \(seq()\): sequencia regular
  • \(rep()\): repetições

Exercícios

  1. Crie uma matriz com 20 linhas e 20 colunas com diferentes números ímpares. (Solução_3.01)
  2. Crie uma nova matriz com as colunas pares da matriz do item 1. (Solução_3.02)
  3. Na matriz do item 2 inclua uma coluna, na última posição, com valores iguais ao número de linhas. (Solução_3.03)
  4. Na matriz do item 3 inclua uma linha, na primeira posição, com valores iguais ao número de colunas. (Solução_3.04)
  5. Crie uma matriz de 2 linhas e 2 colunas com letras e coloque-a (substitua) no centro da matriz do item 2. O que aconteceu com a matriz? (Solução_3.05)
  6. Crie uma matriz com 4 linhas iguais a: 1,2,3,4. Faça um teste para verificar se todos os elementos da coluna 1 são iguais a 1. (Solução_3.06)

Exercícios Continuação

  1. Suponha que a matriz do item 6 corresponda a dados de 4 pessoas ( Marcos, Pedro, Denis e Clara). Crie um objetos onde a primeira coluna seja os nomes e as demais os dados. (Solução_3.07)
  2. Crie um objeto que agregue os resultados de todos os itens anteriores e ainda, inclua a data atual. (Solução_3.08)

Solução_3.01

  1. Crie uma matriz com 10 linhas e 10 colunas com diferentes números ímpares.
> # numareos ímpares
> imp = seq(1, 200, by = 2)
> m1 = matrix(imp, 10, 10)

Retorna

Solução_3.02

  1. Crie uma nova matriz com as colunas pares da matriz do item 1
> N = dim(m1)[2]
> m2 = m1[, seq(2, N, by = 2)]

Retorna

Solução_3.03

  1. Na matriz do item 2 inclua uma coluna, na última posição, com valores iguais ao número de linhas.
> nl = nrow(m2)
> m3 = cbind(m2, nl)
> m3
##                         nl
##  [1,] 21 61 101 141 181 10
##  [2,] 23 63 103 143 183 10
##  [3,] 25 65 105 145 185 10
##  [4,] 27 67 107 147 187 10
##  [5,] 29 69 109 149 189 10
##  [6,] 31 71 111 151 191 10
##  [7,] 33 73 113 153 193 10
##  [8,] 35 75 115 155 195 10
##  [9,] 37 77 117 157 197 10
## [10,] 39 79 119 159 199 10

Retorna

Solução_3.04

  1. Na matriz do item 3 inclua uma linha, na primeira posição, com valores iguais ao número de colunas.
> nc = ncol(m3)
> m4 = rbind(nc, m3)
> m4
##                      nl
## nc  6  6   6   6   6  6
##    21 61 101 141 181 10
##    23 63 103 143 183 10
##    25 65 105 145 185 10
##    27 67 107 147 187 10
##    29 69 109 149 189 10
##    31 71 111 151 191 10
##    33 73 113 153 193 10
##    35 75 115 155 195 10
##    37 77 117 157 197 10
##    39 79 119 159 199 10

Retorna

Solução_3.05

  1. Crie uma matriz de 2 linhas e 3 colunas com letras e coloque-a (substitua) no centro da matriz do item 2. O que aconteceu com a matriz?
> ml = matrix(letters, ncol = 3, nrow = 2)
## Warning in matrix(letters, ncol = 3,
## nrow = 2): comprimento dos dados [26]
## não é um submúltiplo ou múltiplo do
## número de colunas [3]
> ml
##      [,1] [,2] [,3]
## [1,] "a"  "c"  "e" 
## [2,] "b"  "d"  "f"
> dim(m2)
## [1] 10  5

Retorna

Solução_3.05 - continuação

  • O que aconteceu com a matriz?
> m2[c(5, 6), c(2: 4)] = ml
> m2
##       [,1] [,2] [,3]  [,4]  [,5] 
##  [1,] "21" "61" "101" "141" "181"
##  [2,] "23" "63" "103" "143" "183"
##  [3,] "25" "65" "105" "145" "185"
##  [4,] "27" "67" "107" "147" "187"
##  [5,] "29" "a"  "c"   "e"   "189"
##  [6,] "31" "b"  "d"   "f"   "191"
##  [7,] "33" "73" "113" "153" "193"
##  [8,] "35" "75" "115" "155" "195"
##  [9,] "37" "77" "117" "157" "197"
## [10,] "39" "79" "119" "159" "199"

Retorna

Solução_3.06

  1. Crie uma matriz com 4 linhas iguais a: 1,2,3,4. Faça um teste para verificar se todos os elementos da coluna 1 são iguais a 1.
> m6 = matrix(c(1, 2, 3, 4), ncol = 4, nrow = 4,
+             byrow = T)
> m6
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    1    2    3    4
## [3,]    1    2    3    4
## [4,]    1    2    3    4
> m6[,1]==1
## [1] TRUE TRUE TRUE TRUE

Retorna

Solução_3.07

  1. Suponha que a matriz do item 6 corresponda a dados de 4 pessoas ( Marcos, Pedro, Denis e Clara). Crie um objetos onde a primeira coluna seja os nomes e as demais os dados.
> nomes = c("Marcos", "Pedro", "Denis" , "Clara")
> data.frame(nomes, m6)
##    nomes X1 X2 X3 X4
## 1 Marcos  1  2  3  4
## 2  Pedro  1  2  3  4
## 3  Denis  1  2  3  4
## 4  Clara  1  2  3  4

Retorna

Solução_3.08

  1. Crie um objeto que agregue os resultados de todos os itens anteriores e ainda, inclua a data atual.
> L=list(ex1=m1,ex2=m2,ex3=m3,ex4=m4,
+        data=Sys.Date())

Retorna

Data Frame

Data Frame

  • É uma disposição bidimensional dos dados
  • Pode ter elementos de diferentes modos em diferentes colunas, desde que cada coluna tenha o mesmo tamanho.

Criando um Data Frame

> nome = c("Carlos", "Jorge", "Ana")
> nota01 = c(7, 5, 7)
> nota02 = c(8, 6, 4)
> df = data.frame(nome, nota01, nota02)
> df
##     nome nota01 nota02
## 1 Carlos      7      8
## 2  Jorge      5      6
## 3    Ana      7      4

Selecionando elementos do Data Frame

> # similar a um Matriz
> 
> df[1, 2]
## [1] 7
> 
> df[1,]
##     nome nota01 nota02
## 1 Carlos      7      8
> 
> df[, "nota01"]
## [1] 7 5 7

Dimensão do Data Frame

> dim(df)
## [1] 3 3
> ncol(df)
## [1] 3
> nrow(df)
## [1] 3

Ordenando Data Frame

  • Ordenando o data frame por uma coluna
> # ordena df pela nota01
> df[order(df$nota01), ]
##     nome nota01 nota02
## 2  Jorge      5      6
## 1 Carlos      7      8
## 3    Ana      7      4

Identificando linhas e colunas

  • \(colnames()\)
  • \(rownames()\)
> rownames(df)=c("linha01","linha02","linha03")
> colnames(df)=c("Nome", "Nota01", "Nota02")
> df
##           Nome Nota01 Nota02
## linha01 Carlos      7      8
## linha02  Jorge      5      6
## linha03    Ana      7      4

Listas

Listas

  • Coleção ordenada de componentes
  • Como um vetor com objetos de diferente tipos
  • Os componentes de uma lista podem ser de qualquer tipo

Exemplos em R: Listas

> 
> l = list(c(1:10), df)
> l
## [[1]]
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## [[2]]
##           Nome Nota01 Nota02
## linha01 Carlos      7      8
## linha02  Jorge      5      6
## linha03    Ana      7      4

Extraindo elementos de uma Listas

> # obter o elemento da posição 2 da lista l
> l[[2]]
##           Nome Nota01 Nota02
## linha01 Carlos      7      8
## linha02  Jorge      5      6
## linha03    Ana      7      4

Dimensão de uma Listas

> length(l)
## [1] 2

Identificando lista

  • \(names()\)
> L=list(1:10,"Teste")
> names(L)=c("A","B")
> L
## $A
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## $B
## [1] "Teste"

Factor

Factor

  • Armazena os valores nominais (sexo, religião, estado civil, 0,1,2, etc) considerados categorías

  • Usado para identificar grupos com ou sem ordenação

Factor

> #p_sexo com 3 valores male e 2 valores female 
> p_sexo = c(rep("male", 3), rep("female", 2))
> p_sexo
[1] "male"   "male"   "male"   "female"
[5] "female"
> 
> p_sexo = factor(p_sexo) 
> # dois níveis female e male
> p_sexo
[1] male   male   male   female female
Levels: female male

Factor - levels

  • define a ordenação dos fatores
> # os levels são female e male 
> # ordem alfabética quando não especificado
> p_sexo
[1] male   male   male   female female
Levels: female male
> 
> p_sexo = factor(p_sexo, levels=c("male",
+                                  "female")) 
> p_sexo
[1] male   male   male   female female
Levels: male female

Factor - labels

  • define os labels (segue a ordenação - levels)
> # os levels são female e male 
> p_sexo = factor(c(rep("male", 3), 
+                   rep("female", 2)))
> p_sexo
[1] male   male   male   female female
Levels: female male
> 
> # os labels seguem a ordenação do level
> 
> factor(p_sexo, labels=c("malex","female")) 
[1] female female female malex  malex 
Levels: malex female

Factor - labels

> p_sexo = c(rep("male", 3), rep("female", 2))
> p_sexo
## [1] "male"   "male"   "male"   "female"
## [5] "female"
> 
> factor(p_sexo,levels=c("male","female"), 
+                labels=c("malex","female")) 
## [1] malex  malex  malex  female female
## Levels: malex female

Factor - NA

  • NA não é considerado um fator (level)
  • mas pode ser mantido
> factor(c(1:2, NA))
## [1] 1    2    <NA>
## Levels: 1 2
> 
> # mas é possível marter os NA 
> factor(c(1:2, NA), exclude =  "" ) 
## [1] 1    2    <NA>
## Levels: 1 2 <NA>
> 
> # factor(c(1:2, NA), exclude = NULL) 

Factor - ordered

  • define os labels (segue a ordenação - levels)
> z <- factor(LETTERS[3:1], ordered = TRUE)
> z
[1] C B A
Levels: A < B < C

Identificaçõe de objetos

  • \(is.character()\)
  • \(is.logical()\)
  • \(is.numeric()\)
  • \(is.vector()\)
  • \(is.matrix()\)
  • \(is.list()\)
  • \(is.data.frame()\)
  • \(is.factor()\)

Identificando vetor

  • \(names()\)
> v=1:4
> names(v)=c("A","B","C","D")
> v
## A B C D 
## 1 2 3 4

Selecionando elemento pelo nome

> # List
> L$A
##  [1]  1  2  3  4  5  6  7  8  9 10
> 
> #matrix
> m[,"a"] # uma coluna
##  A  B 
## NA NA
> m["A",] # uma linha
##  a  b 
## NA NA