Exercícios Aula 3 **********************Distância entre cidades************************************ Abaixo as distâncias por estradas entre quatro cidades da Europa, em quilômetros: Atenas a Madri: 3949 Atenas a Paris: 3000 Atenas a Estocolmo: 3927 Madri a Paris: 1273 Madri a Estocolomo: 3188 Paris a Estocolmo: 1827 Construa uma matriz de distâncias com esses valores. dist = read.table("distancia.csv", header=T, sep=",", as.is=T, row.names=1) dist Atenas Paris Madri Estocolmo Atenas 0 3000 3949 3927 Paris 3000 0 1273 1827 Madri 3949 1273 0 3188 Estocolmo 3927 1827 3188 0 Compare sua matriz com o objeto eurodist, disponível no pacote datasets. #Comparando os resultados dist.euro = as.matrix(eurodist) dist.euro = as.data.frame(dist.euro) names(dist.euro) #Selecao dos valores a serem comparados dist.sel=dist.euro[c(1,18,14,20),c(1,18,14,20)] class(dist.sel) dist.sel dist table(dist==dist.sel) TRUE 16 **********************Criação de um data frame************************************ Imagine um experimento em que hamsters de dois fenótipos (claros e escuros) recebem três tipos diferentes de dieta, e no qual as diferenças dos pesos (g) entre o fim e o início do experimento sejam: DIETA A DIETA B DIETA C CLAROS 0.1 , 1.1 , 3.7 5.7, -1.2, -1.5 3.0, -0.4, 0.6 ESCUROS 1.5, -0.1, 2.0 0.6, -3.0, -0.3 -0.2, 0.3, 1.5 Crie um data frame com esses dados, na qual cada hamster seja uma linha, e as colunas sejam as variáveis cor, dieta e variação do peso. dieta=seq(1:18) dieta = data.frame(dieta, row.names= NULL) colnames(dieta)= "HAMSTER" dieta$COR=c(rep("CLARO",9),rep("ESCURO",9)) dieta$DIETA=rep(c(rep("A",3),rep("B",3),rep("C",3)),2) dieta$VAR_PESO=c(0.1,1.1,3.7,5.7,-1.2,-1.5,3.0,-0.4,0.6,1.5,-0.1,2.0,0.6,-3.0,-0.3,-0.2,0.3,1.5) HAMSTER COR DIETA VAR_PESO 1 1 CLARO A 0.1 2 2 CLARO A 1.1 3 3 CLARO A 3.7 4 4 CLARO B 5.7 5 5 CLARO B -1.2 6 6 CLARO B -1.5 7 7 CLARO C 3.0 8 8 CLARO C -0.4 9 9 CLARO C 0.6 10 10 ESCURO A 1.5 11 11 ESCURO A -0.1 12 12 ESCURO A 2.0 13 13 ESCURO B 0.6 14 14 ESCURO B -3.0 15 15 ESCURO B -0.3 16 16 ESCURO C -0.2 17 17 ESCURO C 0.3 18 18 ESCURO C 1.5 Qual a media por dieta e por fenótipo? Por fenótipo Claro: H.claro = dieta$COR=="CLARO" Media.claro = mean(dieta$VAR_PESO[H.claro]) Media.claro [1] 1.233333 Escuro: H.escuro = dieta$COR=="ESCURO" Media.escuro = mean(dieta$VAR_PESO[H.escuro]) Media.escuro [1] 0.2555556 Por dieta: Dieta:A media.a=mean(dieta$VAR_PESO[dieta$DIETA=="A"]) media.a ## 1.383333 Dieta:B media.b=mean(dieta$VAR_PESO[dieta$DIETA=="B"]) media.b ## 0.05 Dieta:C media.c=mean(dieta$VAR_PESO[dieta$DIETA=="C"]) media.c ## 0.8 DICA: Use as funções de gerar repetições para criar os vetores dos tratamentos. OPCIONAL: depois de fazer este exercício com as funções de repetição, experimente repetí-lo com a função expand.grid **********************Criando uma Matriz************************************ Crie um objeto da classe matriz com 5 colunas e 3 linhas contendo uma amostra de uma distribuição normal de média 10 e variância 3,6. Mude os nomes das linhas para “L1” a “L3” e das colunas para “C1” a “C5”. Dica: A função paste pode poupar trabalho. ##Criação de uma matriz matrix.3=matrix(rnorm(15, mean=10, sd=3.6), nrow=3, ncol=5) matrix.3 colnames(matrix.3)=paste("C",1:5) rownames(matrix.3)=paste("L",1:3) C 1 C 2 C 3 C 4 C 5 L 1 9.050966 6.370406 12.640716 3.52897 12.719757 L 2 14.689244 6.380764 11.956139 6.20769 2.471119 L 3 9.596716 10.057298 8.651841 17.92962 8.922320 Calcule a média e a variância por colunas e depois por linhas. Guarde os resultados em um dataframe diferenciando variância de média em dois vetores. ## Contagem do Data.Frame col.lin = c(paste("Col",1:5),paste("Lin",1:3)) col.lin col.lin = data.frame(col.lin, row.names=NULL ) ## Criando a coluna Media col.lin$MEDIA = c(mean(matrix.3[ ,1]),mean(matrix.3[ ,2]),mean(matrix.3[ ,3]),mean(matrix.3[ ,4]),mean(matrix.3[ ,5]),mean(matrix.3[ 1,]),mean(matrix.3[2 ,]),mean(matrix.3[3 ,])) ## Criando a coluna var col.lin$VAR = c(var(matrix.3[ ,1]),var(matrix.3[ ,2]),var(matrix.3[ ,3]),var(matrix.3[ ,4]),var(matrix.3[ ,5]),var(matrix.3[1 ,]),var(matrix.3[2 ,]),var(matrix.3[3 ,])) col.lin col.lin MEDIA VAR 1 Col 1 11.112309 9.670312 2 Col 2 7.602823 4.518364 3 Col 3 11.082899 4.549693 4 Col 4 9.222094 58.659674 5 Col 5 8.037732 26.845514 6 Lin 1 8.862163 15.961485 7 Lin 2 8.340991 24.054619 8 Lin 3 11.031560 15.175796 **********************Lendo e Salvando seus dados************************************ Leia um arquivo de dados de sua autoria e faça um sumário das variáveis independentes. Caso não tenha dados, terá que ir a campo, ou utilize alguns dos dados da área Arquivos de dados da nossa página . #Arquivo esaligna.csv esal=read.table("esaligna.csv", header=T, sep=",", as.is=T) esal$classe str(esal) head(esal) Faça uma seleção de um estado de atributo de um vetor fator e salve em um objeto (uma espécie, uma localidade…), mantendo todos os outros dados. Em seguida selecione apenas três colunas dos dados e salve em outro objeto e depois em um arquivo de formato .txt, separado por tabulação e sem nome de linhas. Lembre-se de olhar o help antes de surtar! Para verificar se o arquivo está correto abra-o no EXeCELente programa da Microsoft! #Selecionando da coluna classe o fator A esal.ob=esal[esal$classe=="a",] esal.ob arvore classe talhao dap ht tronco sobra folha total 4 8 a 32 9.0 7.72 12.28 9.99 27.67 49.95 5 9 a 32 7.0 6.55 11.86 7.97 7.76 27.61 9 1 a 22 7.0 11.60 16.19 1.81 0.65 18.66 10 2 a 23 6.3 6.36 6.40 5.92 0.93 13.27 13 3 a 18 7.0 11.30 6.11 8.23 1.12 15.47 16 4 a 16 6.0 7.53 8.51 6.66 1.61 16.78 19 5 a 17 5.9 11.26 3.83 4.14 0.12 8.10 21 6 a 32 7.0 6.74 5.64 5.38 0.72 11.74 23 7 a 16 6.0 8.12 1.96 4.86 0.84 7.67 27 10 a 17 9.4 12.64 31.78 36.72 11.92 80.44 #Selecionando 3 colunas de esal.ob esal.3ob=esal.ob[,1:3] esal.3ob arvore classe talhao 4 8 a 32 5 9 a 32 9 1 a 22 10 2 a 23 13 3 a 18 16 4 a 16 19 5 a 17 21 6 a 32 23 7 a 16 27 10 a 17 #Criando o arquivo .txt write.table(esal.3ob, file = "esal.3ob.txt", append = FALSE, quote = TRUE, sep = " ,",dec = ".", row.names = FALSE, col.names = TRUE, qmethod = c("escape", "double")) **********************Classes de Objetos************************************ O pacote “datasets” contém vários conjuntos de dados para uso em treinamento com a linguagem R. O conjunto “iris” é distribuído de duas formas diferentes, nos objetos iris e iris3. São quatro medidas de flores de três espécies de Iris (Iridaceae). Quais são as classes desses dois objetos? #Verificando Classes > class(iris) [1] "data.frame" > class(iris3) [1] "array" Calcule a média de cada uma das quatro medidas por espécie, dos dois objetos. DICA: as fuções da família apply irão te ajudar. > #Calculo das médias Para o arquivo iris: > media.setosa=apply(iris.setosa,2,mean) > media.setosa Sepal.Length Sepal.Width Petal.Length Petal.Width 5.006 3.428 1.462 0.246 > media.versicolor=apply(iris.versicolor,2,mean) > media.versicolor Sepal.Length Sepal.Width Petal.Length Petal.Width 5.936 2.770 4.260 1.326 > media.virginica=apply(iris.virginica,2,mean) > media.virginica Sepal.Length Sepal.Width Petal.Length Petal.Width 6.588 2.974 5.552 2.026 Para arquivo iris3: > #Calculo de media para Setosa > setosa=iris3.temp[,1:4] > #setosa > media.setosa.2=apply(setosa,2,mean) > media.setosa.2 Sepal L..Setosa Sepal W..Setosa Petal L..Setosa Petal W..Setosa 5.006 3.428 1.462 0.246 > > #Calculo de media para Versicolor > versicolor=iris3.temp[,5:8] > #versicolor > media.versicolor.2=apply(setosa,2,mean) > media.versicolor.2 Sepal L..Setosa Sepal W..Setosa Petal L..Setosa Petal W..Setosa 5.006 3.428 1.462 0.246 > > #Calculo de media para Virginica > virginica=iris3.temp[9:12] > #virginica > media.virginica.2=apply(setosa,2,mean) > media.virginica.2 Sepal L..Setosa Sepal W..Setosa Petal L..Setosa Petal W..Setosa 5.006 3.428 1.462 0.246 Os nomes das variaveis estão em inglês. Mude-os para português no objeto iris. DICA: Como tudo mais no R, os resultados da função names podem ser armazenados em um objeto. > #Mudar os nomes de ingles para portugues > iris.temp=iris > names(iris.temp) [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species" > colnames(iris.temp)=c("Comprimento.Sepala","Largura.Sepala","Comprimento.Petala","Largura.Petala","Espécies") > names(iris.temp) [1] "Comprimento.Sepala" "Largura.Sepala" "Comprimento.Petala" [4] "Largura.Petala" "Espécies" **********************Acrescentando Dados de Síntese************************************ Crie um objeto com os dados do arquivo-texto esaligna.csv. Verifique o conteúdo do objeto resultante, com a função summary. Acrescente uma nova coluna ao data frame resultante, com a soma das biomassas de folhas e do tronco de cada árvore. Acrescente outra coluna, com o valor da área basal de cada árvore. Calcule a área basal total por talhão e salve em um objeto Calcule a média por talhão Selecione apenas os dados relativos à árvores com mais de 10 cm de diâmetro Salve em um arquivo txt, seperado por tabulação. ##Acrescentando dados de Síntese esaligna=read.table("esaligna.csv", header=T, sep=",", as.is=T, row.names=NULL) summary(esaligna) #Criando coluna Biomassa Total esaligna$Biomass.total=esaligna$tronco+esaligna$folha summary(esaligna) #Criando coluna Area Basal esaligna$Area.Basal=(pi*(esaligna$dap^2))/4 head(esaliga) #Calculo da Area Basal por talhão area.basal.talhao = xtabs(Area.Basal~talhao, data=esaligna) area.basal.talhao #Calculo da media por talhao unique(esaligna$talhao) #22 mean.esaligna22 = apply(esaligna[esaligna$talhao==22,4:11],2,mean) mean.esaligna22 #23 mean.esaligna23 = apply(esaligna[esaligna$talhao==23,4:11],2,mean) mean.esaligna23 #32 mean.esaligna32 = apply(esaligna[esaligna$talhao==32,4:11],2,mean) mean.esaligna32 #18 mean.esaligna18 = apply(esaligna[esaligna$talhao==18,4:11],2,mean) mean.esaligna18 #16 mean.esaligna16 = apply(esaligna[esaligna$talhao==16,4:11],2,mean) mean.esaligna16 #17 mean.esaligna17 = apply(esaligna[esaligna$talhao==17,4:11],2,mean) mean.esaligna17 temp1=c("DAP","HT","TRONCO","SOBRA","FOLHA","TOTAL","BIOMASS.TOTAL","AREA.BASAL") tabela.talhao = data.frame(temp1, row.names=NULL) tabela.talhao names(tabela.talhao)="Parametro" tabela.talhao$Talhao22=mean.esaligna22 tabela.talhao$Talhao23=mean.esaligna23 tabela.talhao$Talhao32=mean.esaligna32 tabela.talhao$Talhao18=mean.esaligna18 tabela.talhao$Talhao16=mean.esaligna16 tabela.talhao$Talhao17=mean.esaligna17 Parametro Talhao22 Talhao23 Talhao32 Talhao18 Talhao16 Talhao17 1 DAP 15.3800 13.58750 13.150000 11.633333 10.366667 12.985714 2 HT 17.2860 13.78250 9.798571 13.720000 11.553333 15.818571 3 TRONCO 109.8880 74.78875 66.435714 54.543333 36.008333 82.475714 4 SOBRA 14.8980 14.93625 21.468571 8.956667 9.425000 13.855714 5 FOLHA 5.5800 5.49875 17.941429 2.210000 3.021667 5.444286 6 TOTAL 130.3780 95.23500 105.855714 65.723333 48.463333 101.787143 7 BIOMASS.TOTAL 115.4680 80.28750 84.377143 56.753333 39.030000 87.920000 8 AREA.BASAL 204.6763 163.25777 162.409401 115.822667 93.527831 156.869819 #Arvores com mais de 10cm de diametro Arvores.sel=esaligna[esaligna$dap>=10,] Arvores.sel arvore classe talhao dap ht tronco sobra folha total Biomass.total Area.Basal 1 6 c 22 19.90 21.50 183.64 20.42 8.57 212.64 192.21 311.02553 2 8 b 23 12.40 15.74 42.29 6.58 2.52 51.40 44.81 120.76282 3 7 c 32 16.50 11.74 60.61 11.35 48.52 120.49 109.13 213.82465 6 9 b 32 10.50 8.79 26.10 7.48 23.36 56.95 49.46 86.59015 7 1 c 22 13.00 12.86 47.84 12.14 2.33 62.32 50.17 132.73229 8 2 c 22 20.00 20.05 183.07 32.18 14.56 229.83 197.63 314.15927 11 1 b 23 15.50 18.20 103.39 14.17 5.26 122.83 108.65 188.69191 14 3 b 18 12.50 15.70 68.72 9.24 1.87 79.85 70.59 122.71846 15 4 b 16 10.40 10.52 25.28 6.91 2.57 34.76 27.85 84.94867 17 5 b 23 12.30 14.20 47.19 5.94 3.94 57.08 51.13 118.82289 18 6 b 17 10.00 11.36 26.43 5.79 2.01 34.23 28.44 78.53982 20 3 c 32 20.05 11.40 158.66 42.28 6.69 207.64 165.35 315.73203 22 4 c 16 15.30 14.90 90.81 18.46 8.28 117.56 99.09 183.85386 25 5 c 16 12.50 11.05 39.51 14.37 3.73 57.62 43.24 122.71846 26 8 c 17 22.00 25.52 272.16 18.25 9.49 299.91 281.65 380.13271 28 9 c 22 17.00 20.42 118.70 7.94 1.79 128.44 120.49 226.98007 29 10 c 17 16.00 17.30 98.45 11.71 5.45 115.63 103.90 201.06193 30 10 b 16 12.00 17.20 49.98 5.29 1.10 56.39 51.08 113.09734 31 1 d 23 17.00 16.20 118.12 21.10 7.11 146.33 125.23 226.98007 32 2 d 23 13.70 11.80 50.17 7.32 4.45 61.96 54.62 147.41138 33 3 d 23 23.00 16.80 217.04 55.18 18.88 291.10 235.92 415.47563 34 4 d 32 22.00 15.65 189.90 65.83 10.87 266.61 200.77 380.13271 35 5 d 17 19.00 18.60 119.26 15.88 7.65 142.79 126.91 283.52874 36 6 d 18 15.40 14.16 88.80 9.40 3.64 101.85 92.44 186.26503 #Criando arquivo texto write.table(Arvores.sel,"Arvores_DAP_10cm.txt", append = FALSE, quote = TRUE, sep = ",",eol = "\n", na = "NA", dec = ".", row.names = FALSE, col.names = TRUE, qmethod = c("escape", "double"))