v[-c(4,6)] [1] "a" "b" "c" "e" "g" "h" "i" "j" > v[-(1:3)] [1] "d" "e" "f" "g" "h" "i" "j Note bem a importância dos parênteses no último exemplo, devido à precedência do operador '':' –Experimentar sem os parênteses."> v[-c(4,6)] [1] "a" "b" "c" "e" "g" "h" "i" "j" > v[-(1:3)] [1] "d" "e" "f" "g" "h" "i" "j Note bem a importância dos parênteses no último exemplo, devido à precedência do operador '':' –Experimentar sem os parênteses.">

A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Luís Torgo, 2002FEP, UP Indexação de vectores Para aceder a um elemento de um vector usamos a sua posição entre parênteses rectos. O R também nos permite.

Apresentações semelhantes


Apresentação em tema: "Luís Torgo, 2002FEP, UP Indexação de vectores Para aceder a um elemento de um vector usamos a sua posição entre parênteses rectos. O R também nos permite."— Transcrição da apresentação:

1 Luís Torgo, 2002FEP, UP Indexação de vectores Para aceder a um elemento de um vector usamos a sua posição entre parênteses rectos. O R também nos permite usar vectores dentro desses parênteses rectos. Esses vectores chamam-se vectores de índices. –Existem vários tipos de vectores de índices. Os vectores de índices booleanos extraem de um vector os elementos correspondentes a posições verdadeiras. > x <- c(0,-3,4,-1,45,90,-5) > x [1] 0 -3 4 -1 45 90 -5 > x > 0 [1] FALSE FALSE TRUE FALSE TRUE TRUE FALSE > y 0 > x[x>0] [1] 4 45 90

2 Luís Torgo, 2002FEP, UP Tirando partido da gama de operadores lógicos disponíveis no R, podemos construir vectores de indexação lógicos mais complexos, > x[x 5] [1] -3 45 90 -5 > x[x > 40 & x < 100] [1] 45 90 O R também nos permite usar um vector de números inteiros como índice. –Os números desse vector de índices correspondem aos elementos a extrair do outro vector, > (v <- c('a','b','c','d','e','f','g','h','i','j')) [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" > v[c(4,6)] [1] "d" "f" > v[1:3] [1] "a" "b" "c" OU lógico E lógico > x [1] 0 -3 4 -1 45 90 -5

3 Luís Torgo, 2002FEP, UP Podemos ainda usar um vector com números negativos –Permite-nos indicar quais os elementos a não obter como resultado da indexação, > v[-1] [1] "b" "c" "d" "e" "f" "g" "h" "i" "j" > v[-c(4,6)] [1] "a" "b" "c" "e" "g" "h" "i" "j" > v[-(1:3)] [1] "d" "e" "f" "g" "h" "i" "j Note bem a importância dos parênteses no último exemplo, devido à precedência do operador '':' –Experimentar sem os parênteses.

4 Luís Torgo, 2002FEP, UP Um vector também pode ser indexado por um vector de strings Isto consegue-se tirando partido do facto de o R permitir dar nomes aos elementos de um vector através na função names(). –Vectores com os elementos com nomes são por vezes preferíveis pois as suas ``posições'' são mais facilmente memorizáveis. –Suponhamos que tínhamos um vector com as taxas de inflação de 5 países europeus. Poderíamos criar um vector com nomes da seguinte forma, > tx.infl <- c(2.5,2,2.1,2.3,1.9) > names(tx.infl) <- c('Portugal','França','Espanha','Itália','Alemanha') > tx.infl Portugal França Espanha Itália Alemanha 2.5 2.0 2.1 2.3 1.9 Os elementos do vector tx.infl podem agora ser acedidos usando os seus nomes, > tx.infl['Portugal'] Portugal 2.5 > tx.infl[c('Espanha','Alemanha')] Espanha Alemanha 2.1 1.9

5 Luís Torgo, 2002FEP, UP Os índices também podem ser vazios –Significa que todos os elementos são seleccionados. Por exemplo, se pretendemos preencher todas as posições de um vector com zeros podemos fazer, x[] <- 0 De notar, que isto é diferente de fazer, x <- 0 Esta última instrução teria como efeito atribuir ao vector x um vector com um único elemento (zero), enquanto que a primeira alternativa, assumindo que o vector x já existia, iria substituir todos os seus elementos por zero.

6 Luís Torgo, 2002FEP, UP Algumas funções úteis sobre vectores Estatísticas básicas > tx.infl <- c(2.5,2,2.1,2.3,1.9) > names(tx.infl) <- c('Portugal','França','Espanha','Itália','Alemanha') > tx.infl Portugal França Espanha Itália Alemanha 2.5 2.0 2.1 2.3 1.9 > sort(tx.infl) Alemanha França Espanha Itália Portugal 1.9 2.0 2.1 2.3 2.5 > max(tx.infl)> min(tx.infl) [1] 2.5 [1] 1.9 > which.max(tx.infl)> which.min(tx.infl) [1] 1 [1] 5 > tx.infl[which.max(tx.infl)] Portugal 2.5 > mean(tx.infl) > sd(tx.infl) [1] 2.16 [1] 0.2408319

7 Luís Torgo, 2002FEP, UP > summary(tx.infl) Min. 1st Qu. Median Mean 3rd Qu. Max. 1.90 2.00 2.10 2.16 2.30 2.50 > barplot(tx.infl) > barplot(tx.infl,main='Inflação na UE',ylab='Taxa',xlab='Países')

8 Luís Torgo, 2002FEP, UP Imagine que possui informação quanto aos preços de 10 produtos. Guarde-os num objecto apropriado do R. > preços <- c(54,32,76,45.3,45.8,132,47,43,98,100) 2.Quais os valores de IVA a pagar por cada produto? > 0.19 * preços 3.Suponha que possui informação sobre os nomes dos produtos. Tire partido dessa informação para mais facilmente aceder aos preços dos produtos. > names(preços) <- c(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) Alternativa (mais prática para muitos produtos): > names(preços) <- paste(p,1:10,sep=) 4.Ordene os produtos por ordem crescente de preço. Como obter os preços por ordem decrescente (sugestão consulte o help da função sort). > sort(preços) > sort(preços, decreasing=T) 5.Quais o mais caro e o mais barato dos produtos? > max(preços)OU> preços[which.max(preços)] > min(preços)> preços[which.mix(preços)]

9 Luís Torgo, 2002FEP, UP 6.Coloque num vector os produtos com preço superior à média dos preços. > sup mean(preços)] 7.Quais os 3 produtos mais caros? > sort(preços,decreasing=T)[1:3] Suponha que pretende guardar as vendas nos meses do último ano das 2 sucursais de uma empresa. Escolha o objecto do R apropriado e tire partido das potencialidades do R para facilitar o acesso a esta informação. > vendas <- matrix(c(23,43,54,23,53,43,54,65,76,34,65,34,546,67, + 35,45,56,57,34,34,46,56,57,678),2,12) > colnames(vendas) <- c('Jan','Fev','Mar','Abr','Mai','Jun','Jul', + 'Ago','Set','Out','Nov','Dez') > rownames(vendas) <- c('Braga','Faro') Como saber qual o volume de vendas médio de cada sucursal ao longo do ano? > mean(vendas['Braga',]) > mean(vendas['Faro',]) Experimente esta alternativa: > apply(vendas,1,mean) tente também > apply(vendas,2,mean) 10.Construa um gráfico de barras com as vendas de uma das sucursais ao longo do ano. > barplot(vendas['Braga',],main='Vendas em Braga', + ylab='Volume de Vendas')

10 Luís Torgo, 2002FEP, UP Matrizes As matrizes arranjam a informação em duas dimensões. –Em contraposição aos vectores que a arranjam numa só dimensão. Em R as matrizes não são mais do que vectores com duas dimensões. –Podemos guardar um conjunto de valores numa matriz da seguinte forma: > m <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5) > m [,1] [,2] [,3] [,4] [,5] [1,] 45 66 33 56 78 [2,] 23 77 44 12 23 Número de linhas Número de colunas

11 Luís Torgo, 2002FEP, UP > m <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5) [,1] [,2] [,3] [,4] [,5] [1,] 45 66 33 56 78 [2,] 23 77 44 12 23 Podemos espalhar os números por linha da seguinte forma: > m <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5,byrow=T) > m [,1] [,2] [,3] [,4] [,5] [1,] 45 23 66 77 33 [2,] 44 56 12 78 23 Podemos aceder aos elementos de uma matriz da seguinte forma: > m[2,4] [1] 78 > m[1,1] [1] 45 Podemos aceder a todos os elementos de uma dimensão da seguinte forma: > m[1,] [1] 45 23 66 77 33 > m[,3] [1] 66 12 1ª linha 3ª coluna Note : o resultado é um vector. Os números foram espalhados por coluna.

12 Luís Torgo, 2002FEP, UP As regras da reciclagem também são usadas com matrizes > preços.lojas.2002 <- matrix(c(10.4,12,32,34,32.3,30.2,343,350),2,4) > preços.lojas.2002 [,1] [,2] [,3] [,4] [1,] 10.4 32 32.3 343 [2,] 12.0 34 30.2 350 > (preços.lojas.2003 <- 1.04 * preços.lojas.2002) [,1] [,2] [,3] [,4] [1,] 10.816 33.28 33.592 356.72 [2,] 12.480 35.36 31.408 364.00

13 Luís Torgo, 2002FEP, UP Dar nomes às dimensões Por vezes é mais simples usarmos nomes nas dimensões. > preços.lojas.2002 <- matrix(c(10.4,12,32,34,32.3,30.2,343,350),2,4) > colnames(preços.lojas.2002) <- c('p1','p2','p3','p4') > rownames(preços.lojas.2002) <- c('porto','lisboa') > preços.lojas.2002 p1 p2 p3 p4 porto 10.4 32 32.3 343 lisboa 12.0 34 30.2 350 > preços.lojas.2002['porto','p3'] [1] 32.3 > preços.lojas.2002['lisboa',] p1 p2 p3 p4 12.0 34.0 30.2 350.0 > preços.lojas.2002[,'p2'] porto lisboa 32 34 > preços.lojas.2002[,2] porto lisboa 32 34 Continuamos a poder usar os números

14 Luís Torgo, 2002FEP, UP Álgebra Matricial Para obtermos a multiplicação matricial de duas matrizes usamos: > m1 <- matrix(c(45,23,66,77,33,44),2,3) > m1 [,1] [,2] [,3] [1,] 45 66 33 [2,] 23 77 44 > m2 <- matrix(c(5,3,466,54.5,3.2,-34),3,2) > m2 [,1] [,2] [1,] 5 54.5 [2,] 3 3.2 [3,] 466 -34.0 > m1 %*% m2 [,1] [,2] [1,] 15801 1541.7 [2,] 20850 3.9

15 Luís Torgo, 2002FEP, UP Transposta de uma matriz > m1 [,1] [,2] [,3] [1,] 45 66 33 [2,] 23 77 44 Determinante e inversa de uma matriz quadrada > m <- matrix(c(34,-23,43,5),2,2) > det(m) [1] 1159 > solve(m) [,1] [,2] [1,] 0.004314064 -0.03710095 [2,] 0.019844694 0.02933563 > t(m1) [,1] [,2] [1,] 45 23 [2,] 66 77 [3,] 33 44

16 Luís Torgo, 2002FEP, UP Resolução de sistemas de equações lineares A função solve() também pode ser usada para resolver este tipo de sistemas. Exemplo: > coefs <- matrix(c(-4,54.3,0.3,-4),2,2) > colnames(coefs) <- c('x','y') > rownames(coefs) <- c('eq1','eq2') > coefs x y eq1 -4.0 0.3 eq2 54.3 -4.0 > ys <- c(12.3,45) > solve(coefs,ys) x y 216.2069 2923.7586

17 Luís Torgo, 2002FEP, UP Data Frames É semelhante a uma matriz mas as colunas têm nomes Corresponde a uma tabela de uma BD >notas.inform<-data.frame(nros=c(23,34,23,12), +turma = c(tp1,tp1,tp2.tp3), +notas = c(10.3,9.5,7.9,12)) notas.inform Um data frame pode ser acedido como uma matriz >notas.inform[,2] mostra a coluna 2, >notas.inform$nros notas.inform[notas.inform$notas>10,] todos os campos notas.inform[notas.inform$notas>10,c(nros,notas)]

18 Luís Torgo, 2002FEP, UP A função attach associa a cada coluna o seu nome >attach(notas.inform) Semelhante a fazer >notas<- notas.inform$notas... >notas.inform[notas>10,] mostra todas as linhas >turma Mostra a coluna como notas.inform$turmas A função detach desfaz o attach >detach(notas.inform) Acrescentar novas colunas (=número de elementos) >notas.inform&resultado<-c(aprovado,oral,…) >nrow(notas.inform) >ncol(notas.inform) Editor >notas.inform<-edit(notas.inform)


Carregar ppt "Luís Torgo, 2002FEP, UP Indexação de vectores Para aceder a um elemento de um vector usamos a sua posição entre parênteses rectos. O R também nos permite."

Apresentações semelhantes


Anúncios Google