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
| \(+\) |
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
| \(==\) |
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
NaN - not a number
- NaN: “not a number”, o valor não pode ser calculado
NA - not avaible
> 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
| \(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
| \(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 |
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
Cosseno, Seno e Tangente
> cos(pi) #ângulo em radianos
## [1] -1
> sin(pi/2)
## [1] 1
arco_cosseno, arco_seno e arco_tangente
logarítmo
> log(10)
## [1] 2.3
> log(10,base=10)
## [1] 1
Exercícios_01
- Calcule a área de uma circunferência de raio 337 (\(A=\pi r^2\))
- Qual a raiz quadrada de 3976?
- Crie um objeto, \(a\), com o valor 10, e outro, \(b\) com o 30.
- Execute uma função que teste se \(a\) é menor que o logaritmo (base 10) de \(b\).
- Execute uma função que teste se \(a\) NÃO é igual a \(b\) elevado ao quadrado e dividido por \(a\) menos 1.
- Crie um objeto com nome nota média e atribua valor 10.
- 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?
Retorna
Solução_1.03
Crie o objeto a com o valor 10, b com o 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
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)
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
- Crie uma sequencia regular de valores entre 0 e 3 a cada 0.25. Solução
- 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
- No vetor resultante no item 2, qual a posição do menor e do maior valor?Solução
- Ordene o vetor do item 2 e separe em dois objetos os 3 menores e os 3 maiores valoresSolução
- 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
- Ordene o vetor do item 2 de forma decrescente. Solução
Exercícios_02 - continuação
Crie um vetor de tamanho 20, onde todos os elementos tem valor 25.Solução
Crie um vetor de tamanho 20, onde os 8 primeiros tem valor 20 e os demais valor 37.Solução
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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
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
> 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
- Crie uma matriz com 20 linhas e 20 colunas com diferentes números ímpares. (Solução_3.01)
- Crie uma nova matriz com as colunas pares da matriz do item 1. (Solução_3.02)
- Na matriz do item 2 inclua uma coluna, na última posição, com valores iguais ao número de linhas. (Solução_3.03)
- Na matriz do item 3 inclua uma linha, na primeira posição, com valores iguais ao número de colunas. (Solução_3.04)
- 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)
- 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
- 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)
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
Identificando lista
> 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
> 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