Essa é uma revisão anterior do documento!
Miscelânia de tópicos
Representação e Manipulação de datas
## transformando caracteres em datas dt1 <- as.Date("4/02/2011 03:24:13", "%d/%m/%Y %H:%M:%S") dt1 ## exibindo a data de otras formas format(dt1, "%j") # dia do ano format(dt1, "%A") # dia da semana format(dt1, "%c") # referencia completa (de acordo com o locale do sistema) format(dt1, "%m") # número do mes ## opcoes disponíveis para exibição: # a A b B c d H I j m M p S U w W x X y Y z Z Sys.time() format(as.Date(Sys.time(), "%d/%m/%Y %H:%M:%S"), "%j") ## as datas podem ser fornecidas de outras maneiras... x <- c("25set1967", "28set1969", "30jan2003", "05jul2004") z <- strptime(x, "%d%b%Y") z ## ## Ver detalhes aqui!!! ## ## e note a confusão com a omisão do século !!! x <- c("1jan90", "2jan90", "31mar90", "30jul90") z <- strptime(x, "%d%b%y") z x <- c("25set67", "28set69", "30jan03", "05jul04") z <- strptime(x, "%d%b%y") z ## concatenando datas e horarios para formar registros únicos dates <- c("02/27/92", "02/27/92", "01/14/92", "02/28/92", "02/01/92") times <- c("23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26") x <- paste(dates, times) strptime(x, "%m/%d/%y %H:%M:%S") dt2 <- strptime(x, "%m/%d/%y %H:%M:%S") format(dt2, "%c") dt2 <- sort(dt2) dt2 diff(dt2) ## frações de segundos z <- strptime("20/2/06 11:16:16.683", "%d/%m/%y %H:%M:%OS") z op <- options(digits.secs=3) z
Lendo dados de teclado e da área de transferência
## digitar dados com <ENTER> após cada registro. Digitar um <ENTER> a mais para encerrar. s1 <- scan() ## recortar (CTRL-C) os seguintes 12 13 14 21 21 14 12 31 25 15 32 29 ## lendo como vetor... s1 <- scan("clipboard") ## .. e transformando para matriz ## le por linhas, portanto para montar matriz de ser por linha matrix(s1, nc=3, byrow=T) ## agora lendo diretamente como data-frame d1 <- read.table("clipboard") d1 ## mais opcoes ## recortar (CTRL-C) os seguintes X; Y; Z; S 12,3; 13; 14,2; A 21,2; 21; 14,0; A 12,1; 31; 25,1; B 15,1; 32; 29,9; B d2 <- read.table("clipboard", sep=";", dec=",", header=T) d2
Exemplo lendo tabelas da página do MCT/Indicadores
Acessar tabelas na web por www.mct.gov.br/indicadores
Tabela de Produçãoo científica, tabela 5.1 (pesquisadores)
## Marcar/CTRL-C a tabela de indicadores de pesquisadores pcPesq <- read.table("clipboard", sep="\t", dec=",") head(pcPesq) ## uma um pouco melhor usando mais argumentos pcPesq <- read.table("clipboard", sep="\t", dec=",", strip.white=T, as.is=T) head(pcPesq) str(pcPesq)
Note que todas as colunas, exceto a primeira, foram lidas como caracteres!
Note que a tabela usa o caracter "." para separar milhares.
Entretanto o R usa "." como caracter de separação decimal
Duas possíveis formas para contornar e ajustar os dados neste contexto:
- Item de lista ordenada converter para números e multiplicar por mil
pcPesq$V2 as.numeric(pcPesq$V2) as.numeric(pcPesq$V2)*1000 ## agora automatizando para fazer em todas as colunas necessárias Pesq <- as.data.frame(lapply(pcPesq, function(x){if(is.character(x)) x <- as.numeric(x)*1000; return(x)})) Pesq
- Eliminando o caracter "." (por substituição de caracteres.
Pesq1 <- as.data.frame(lapply(pcPesq, function(x){ if(!is.numeric(x) & !is.integer(x)) x <- as.numeric(gsub("\\.", "", x)) return(x)}))
Agora lendo os indicadores de estudantes e depois unir tudo em um único objeto
pcEst <- read.table("clipboard", sep="\t", dec=",", strip.white=T, as.is=T) head(pcEst) Est <- as.data.frame(lapply(pcEst, function(x){if(is.character(x)) x <- as.numeric(x)*1000; return(x)})) Est Pesq$Autor <- "Pesquisador" Est$Autor <- "Estudante" ProdC <- rbind(Pesq, Est) ProdC head(ProdC) names(ProdC) <- c("Ano","Autores","Nacional","Internacional","Anais", "Livros", "Capítulos", "Outras", "Autor") head(ProdC) ## sempre bom remover o que não é mais necessário... rm(pcEst, pcPesq, Pesq1, Pesq, Est)
Alguns gráficos
Vamos ilustrar o uso de três (3) dispositivos gráficos do R:
- Gráficos básicos do sistema (pacote
graphics
/default) - Gráficos da biblioteca
lattice
- Gráficos da biblioteca
ggplot
I. gráficos com graphics
(padrões do sistema)
## produção total, somando pesquisadores e estudantes aggregate(Autores ~ Ano, data=ProdC, sum) plot(aggregate(Autores ~ Ano, data=ProdC, sum)) plot(aggregate(Autores ~ Ano, data=ProdC, sum), type="b", main="Número total de autores") ## somando agora todas as produções de Perq e Estudantes por ano Totais <- aggregate(. ~ Ano, data=ProdC[,-9], sum) matplot(Totais[,1], Totais[,-1], type="l") names(Totais) matplot(Totais[,1], Totais[,-1], type="l", col=c(1, 2, 2, 3, 4, 4, 5), lty=c(1,1,2,1,1,2,5), xlab="Ano", ylab="Quantidade", main="Produção Científica") legend("topleft", names(Totais)[-1], col=c(1, 2, 2, 3, 4, 4, 5), lty=c(1,1,2,1,1,2,5)) ## agora separando entre Pesquisadores e Estudantes ## gráficos podem ser feitos de várias formas, aqui alguns exemplos with(ProdC, plot(Autores ~ Ano, type="n")) with(ProdC, text(Ano, Autores, substr(Autor, 1, 1)) with(ProdC, coplot(Autores ~ Ano|Autor, type="b")) with(ProdC, coplot(Autores ~ Ano|Autor, type="b", show.given=F)) with(subset(ProdC, Autor=="Pesquisador"), plot(Autores ~ Ano, type="b")) with(subset(ProdC, Autor=="Estudante"), lines(Autores ~ Ano, type="b", col=2)) AU <- reshape(ProdC[,c(1,2,9)], idvar="Ano", v.name="Autores", timevar="Autor", direction="wide") matplot(AU[,1], AU[,-1], type="l", col=c(2,4), lty=1, main="Evolução do número de autores", xlab="Ano", ylab="Número de Autores") legend("topleft", c("Pesquisadores","Estudandes"), col=c(2,4), lty=1)
II. Gráficos da biblioteca lattice
require(lattice)
III. Gráficos da biblioteca ggplot
install.packages("ggplot2", dep=T) ## contributed package" - é necessário instalar! require(ggplot2)
## Outro exemplo…. ## Dados socio economicos –> 9.1 ScEc ← read.table("clipboard", dec=",", sep="\t", na.strings="\\u2026 ") head(ScEc)
ScEc ← as.data.frame(lapply(pcPesq, ptMil))
</code>