#### AULA 2 - MANEJO DE DADOS NO R ### setando o diretorio de trabalho: # Files / ... e escolher pasta # depois ir em More / 'set as working directory' ### verificando o direterio de trabalho getwd() # outro modo de setar o diretorio setwd("...") # "limpar" os objetos rm(list=ls()) #### salvando e carregando a workspace com o objetos # salvando a workspace -colocar este comando no final do script # save.image("aula2.Rdata") # carregando a workspace load("aula2.Rdata") ls() #### 1. Importar dados para o R # banco de dados 'amostra.xls' - transformar em .txt # salvar como .txt separado por tabulacoes LV <- read.table("./Bancos_aula2/amostra.txt",header = T) LV head(LV) #mostrando 6 prim linhas head(LV,10)# mostrando 10 prim linhas View(LV) ## Ajutar o texto do script conforme tamanho da tela ## Tools > Global Options > Code > Soft-wrap... # mostrar a estrut do bd str(LV) # obj do tipo dataframe #### 2. Transformar vetores em matrizes aa<-c(1,3,5,7,9) bb<-c(5,6,3,8,9) cc<-c("a","a","b","a","b") cbind(aa,bb) # junta os vetores em colunas rbind(aa,bb) # junta os vetores em linhas cbind(aa,bb,cc) # como 'cc' tem letras, na juncao todos sao considerados caracter #### 3. Transf de vetores em dataframes data.frame1 <- data.frame(aa,bb,cc) data.frame1 # aceitou numeros e letras sem problemas str(data.frame1) #### 4. Acessar partes da tabelas de dados - uso de colchetes [] LV [,1] # extrai a 1ª col LV[,2] # extrai a 2ª col LV[1,] # extrai a 1ª linha LV[3,4] # extrai o valor q esta na terceira linha e quarta col LV[c(1:5),c(2,3)] # extrai as linhas de 1 a 5, das col 2 e 3 LV$LVH # o nome do dataframe + $ + nome da var - outra forma de acessar dados espec do bd LV[,"LVH"] # a mesma operacao acima, mas usando colchetes # fazendo o graf de LVH com LVC plot(LV$LVC,LV$LVH) plot(LV[,"LVC"],LV[,"LVH"]) #### 5. funcaoo 'attach' # permite acessar diretamente os dados do dataframe attach(LV) LVH LVC plot(LVC,LVH) detach(LV) # lembrar de 'desatachar' para evitar prob - por exemplo, usar um # banco no lugar de outro #### 6. Operacoes usando dataframes ## 6.1 Ordenacao de tabelas - funcao 'order' LV[order(LV$LVH),] # colocar as linhas do df na ordem crescente dos casos de LVH LV[order(LV$LVH, decreasing=T),] # em ordem decrescente ## 6.2 Calcular a media de uma linha ou coluna mean(LV$LVH) attach(LV) mean(LVH) detach(LV) # ou mean(LV[,"LVH"]) # calculo das medias de casos de LVH considerando, em separado, as duas cidades mean(LV[1:10,3]) # media de casos de LVH na cidade A mean(LV[11:20,3]) # media de casos de LVH na cidade B # func 'tapply' - ideal para qdo se tem varias categorias # tapply(dados, grupos, funcao) - sera calc um 'func' nos 'dados' seg os 'grupos' tapply(LV$LVH,LV$cidade,mean) # faz o calc das duas medias ## 6.3 Soma e media de linhas e de col colSums(LV[,3:4]) # somas das col 3 e 4 rowSums(LV[1:5,3:4]) # soma das linhas de 1 a 5, apenas para as var LVH e LVC colMeans(LV[,3:4]) # medias das col 3 e 4 rowMeans(LV[1:5,3:4]) # medias da linhas 1 a 5, apenas para as var LVH e LVC colMeans(LV[1:10,3:4]) # medias de LVH e LVC apenas da cidade A #### 7. Trabalhando com um banco de dados de simulideos (borrachudos) simu <- read.csv("./Bancos_aula2/simu_csv.csv",sep=';') #lendo o banco names(simu) # vendo os nomes das variav str(simu) head(simu) View(simu) # 1ªs seis variav sao ambientais e as demais referem-se as diferentes espec coletadas # cd linha refere-se as coletas realizadas em um riacho # vamos criar dois bancos separados ambi <- simu[,1:7] str(ambi) spp <- simu[,8:27] str(spp) # graf mostrando relacao enter var ambientais plot(ambi[,"temperatura"],ambi[,"altitude"]) plot(ambi[,"altitude"],ambi[,"pH"]) plot(ambi[,"condutividade"],ambi[,"pH"]) # outras possib de chegar ate as variav plot(ambi$temperatura,ambi$altitude) attach(ambi) plot(temperatura, altitude) detach(ambi) abund <- rowSums(spp) # total de indiv encontrados em cd riacho (abundancia) abund # agrupando uma variavel continua e transf em uma categorica # a) analise exploratoria ambi[order(ambi$temperatura),] #colocando em ordem por temperatura - ter ideia da amplitude hist(ambi$temperatura) # para ter ideia de possiveis ptos de corte quantile(ambi$temperatura, type=4) # type - numero de quantis (de 1 a 9) default = 4 # b) construcao dos agrupamentos - vamos usar a divisao por quartis temp.nv <- ambi$temperatura # criando um vetor com os dados de temp temp.nv[ambi$temperatura<18] <- "13a17" temp.nv[ambi$temperatura>=18 & ambi$temperatura<20] <- "18a19" temp.nv[ambi$temperatura>=20 & ambi$temperatura<21] <- "20" temp.nv[ambi$temperatura>=21] <- "21a24" temp.nv # c) inserindo o vetor no dataframe 'ambi' ambi1 <- cbind(ambi,temp.nv) str(ambi1) head(ambi1) # fazendo uma tabela de contingencia entre a 'temp.nv' e os municipios tab <- table(ambi1$municipio,ambi1$temp.nv) # calculando as porcentagens de linha, de coluna e em rela??o ao total a partir de uma tabla de conting?ncia prop.table(tab) # porcentagens em relacao ao total prop.table(tab,1) # porcentagens de linha prop.table(tab,2) # porcentagens de coluna ### Calculo do numero de especies (riqueza) encontradas em cd riacho #(cd col do df 'spp' repres 1 esp) # fazer copia do df e depois transformar em um df de zeros e uns head(spp) spp_cp <- spp spp_cp spp_cp[spp_cp>0] <- 1 # qdo o numero for maior q 0, recebe 1 spp_cp # agora é um dataframe com zeros e uns head(spp_cp) pres.aus <- spp_cp # criando um nv bd com o nome 'pres.aus' riqueza <- rowSums(pres.aus) # calc do nº de espec por riacho (riqueza) riqueza # calculo do nº medio de espec (riqueza media) riq_med <- mean(rowSums(pres.aus)) riq_med # calc do nº de esp medio por munic (riqueza por munc) riq.munic <- tapply(riqueza,ambi[,"municipio"],mean) riq.munic # retornando ao arq completo 'simu' # ordenar o banco pela altitude (cresc) simu[order(simu[,"altitude"]),] # fazendo quatro graf do numero de espec par(mfrow=c(2,2)) # graf 1 - altitude x nº de esp plot(simu[,"altitude"],rowSums(pres.aus)) # criando um df com ambi e riqueza riq <- rowSums(pres.aus) ambi1 <- cbind(ambi1, riq) head(ambi1) # graf 2 - pH x nº de esp plot(simu[,"pH"],rowSums(pres.aus)) # graf 3 - temperatura x nº de esp plot(simu[,"temperatura"],rowSums(pres.aus)) # graf 4 - condutividade x nº de esp plot(simu[,"condutividade"],rowSums(pres.aus)) # Graf: nº de esp (riqueza) nas tres areas (Lencois, Mucug e Rio de Contas) par(mfrow=c(1,1)) par() stripchart(riqueza~simu[,"municipio"]) # colocando o graf na vertical e separando os ptos coincidentes stripchart(riqueza~simu[,"municipio"],vertical=T,method="stack",offset=1) stripchart(riqueza~simu[,"municipio"],vertical=T,method="stack") # uso das funcoes 'aggregate' e 'by' # sao utilizadas p/ aplicar um func em td col de uma tab # 'tapply' faz isso somente em uma col por vez # as duas func (aggregate e by) retornam os mesmos resul - mas de formas difer # calculo da media de cada esp de borrach em cd munic list(simu[,1]) #apresenta uma lista com os munic de cd linha da tab aggregate(spp,list(simu[,1]),mean) # agora usando o comando 'by' by(spp,simu[,1],colMeans) # retorna uma lista de valores para cd local (munic) # se quisermos acessar os valores da lista med.local <- by(spp,(simu[,1]),colMeans) # usamos como arg o "colMeans" pq 'spp' é um df med.local str(med.local) # é uma lista # para acessar os valores de uma lista - usamos dois colchetes med.local[["Lencois"]] med.local[["Mucuge"]] # transposicao de uma tabela - comando 't' head(ambi) transp <- t(ambi) # troca de linhas por colunas head(transp) ### 8. Alguns comandos de logica # > Maior que # >= maior que ou igual a # < Menor que # <= menor que ou igual a # == igualdade # != diferenca x<-c(1,2,9,4,5) y<-c(1,2,6,7,8) x>y # Retorna TRUE para os maiores e FALSE para os menores x>=y x10 # Retorna um vetor contendo TRUE se for maior e FALSE se for menor which(a>10) # "Quais valores de a sao maiores que 10?". Note que a resposta é a posicao # dos valores (o sexto, o s?timo...) e nao os valores que sao maiores que 10. a[which(a>=14)]# selecionar os valores maiores ou iguais a 14 (aqui temos os valores e a pos deles) ambi[which(ambi$temperatura>20),] # selec as linhas de 'ambi1 c/ temp > 20 # criando um nv df com os riach de Lencois riach.lenc <- ambi[which(ambi$municipio=="Lencois"),] # selec os riachos de Lencois head(riach.lenc) # criando um nv df com riach de Lencois com temp > 20 riach.temp20m.lenc <- ambi[which(ambi$temperatura>20 & ambi$municipio=="Lencois"),] head(riach.temp20m.lenc) # funcao 'ifelse' salarios<-c(1000, 400, 1200, 3500, 380, 3000, 855, 700, 1500, 500) ifelse(salarios<1000,"pouco","muito") head(spp) spp.pres.aus <- ifelse(spp>=1,1,0) # transf os valores do banco 'spp' em zeros e uns head(spp.pres.aus) spp.pres.aus ### BIBLIOGRAFIA # Landeiro VL. Introdu??o ao uso do Programa R. INPA,2011. # Provete DB, Silva FR, Souza TG.Estat?stica aplicada ? ecologia usando o R. UNESP, # S?o Jos? do Rio Preto, 2011. # Kabacoff RI. R in action - Data analysis and graphics with R. Manning, Shelter Isalnd, 2015. ##################################################################### ### salvando a workspace com os objetos save.image("aula2.Rdata") ################################################################