Não foi possível enviar o arquivo. Será algum problema com as permissões?
Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
| Próxima revisão | Revisão anterior | ||
|
cursos:mct:exemplo1a [2011/05/09 11:01] paulojus criada |
cursos:mct:exemplo1a [2011/05/27 00:42] (atual) paulojus |
||
|---|---|---|---|
| Linha 71: | Linha 71: | ||
| return(x)})) | return(x)})) | ||
| </code> | </code> | ||
| + | |||
| + | Algumas operações ilustrando funções ''*apply'' | ||
| + | <code R> | ||
| + | Tot.L <- function(x) sum(x[-1]) | ||
| + | Pesq$Total <- apply(Pesq, 1, Tot.L) | ||
| + | Pesq | ||
| + | |||
| + | ## Eliminando a coluna | ||
| + | Pesq$Total <- NULL | ||
| + | Pesq | ||
| + | </code> | ||
| + | |||
| + | Uma função para criar uma nova coluna que seria um indicador calculado com os dados | ||
| + | <code R> | ||
| + | ## uma função simples | ||
| + | Indic <- function(x){ | ||
| + | return((sum(x[c(2,3,4)])/max(x[c(5,6)])) - mean(x[c(7,8)])) | ||
| + | } | ||
| + | |||
| + | ## uma versao mais elaborada | ||
| + | Indic <- function(x, na.rm=T, metodo){ | ||
| + | metodo <- match.arg(metodo, choice=c("mean","median")) | ||
| + | ## testando se os dados sao numéricos | ||
| + | if(any(!is.numeric(x[-1]))){ | ||
| + | stop("dados não numéricos") | ||
| + | } | ||
| + | ## mensagem de alerta | ||
| + | if(any(is.na(x[-1]))) | ||
| + | warning("dados incompletos") | ||
| + | S1 <- sum(x[c(2,3,4)], na.rm=na.rm) | ||
| + | S2 <- max(x[c(5,6)], na.rm=na.rm) | ||
| + | ## duas formas de fazer e escolha da funcao (if ou do.call) | ||
| + | if(metodo == "mean") | ||
| + | S3 <- mean(x[c(7,8)], na.rm=na.rm) | ||
| + | if(metodo == "median") | ||
| + | S3 <- median(x[c(7,8)], na.rm=na.rm) | ||
| + | # do.call(metodo, x[c(7,8)], na.rm=na.rm) | ||
| + | Ind <- (S1/S2) - S3 | ||
| + | return(Ind) | ||
| + | } | ||
| + | |||
| + | apply(Pesq, 1, Indic) | ||
| + | apply(Pesq, 1, Indic, na.rm=F) | ||
| + | |||
| + | apply(Pesq, 2, mean, na.rm=T) | ||
| + | </code> | ||
| + | |||
| + | ''lapply()'' e ''sapply()'' para listas e data-frames. A segunda simplifica o resultado da primeira se possível. | ||
| + | <code> | ||
| + | fc <- function(x) c(mean(x[-1]), median(x[-1])) | ||
| + | lapply(Pesq, fc) | ||
| + | sapply(Pesq, fc) | ||
| + | </code> | ||
| + | |||
| Agora lendo os indicadores de estudantes e depois unir tudo em um único objeto | Agora lendo os indicadores de estudantes e depois unir tudo em um único objeto | ||
| Linha 92: | Linha 146: | ||
| rm(pcEst, pcPesq, Pesq1, Pesq, Est) | rm(pcEst, pcPesq, Pesq1, Pesq, Est) | ||
| </code> | </code> | ||
| + | |||
| + | **Operações por grupos**\\ podem sere feitas com ''tapply()'', ''by()'' ou ''aggregate()'' | ||
| + | <code R> | ||
| + | with(ProdC, tapply(Autores, Ano, sum)) | ||
| + | with(ProdC, by(Autores, Ano, sum)) | ||
| + | aggregate(Autores ~ Ano, data=ProdC, sum) | ||
| + | </code> | ||
| + | |||
| **Alguns gráficos**\\ | **Alguns gráficos**\\ | ||
| Linha 102: | Linha 164: | ||
| <code R> | <code R> | ||
| ## produção total, somando pesquisadores e estudantes | ## produção total, somando pesquisadores e estudantes | ||
| - | aggregate(Autores ~ Ano, data=ProdC, sum) | + | AuporAno <- aggregate(Autores ~ Ano, data=ProdC, sum) |
| - | plot(aggregate(Autores ~ Ano, data=ProdC, sum)) | + | AuporAno |
| - | plot(aggregate(Autores ~ Ano, data=ProdC, sum), type="b", main="Número total de autores") | + | plot(AuporAno) |
| + | plot(AuporAno, type="b", main="Número total de autores") | ||
| ## somando agora todas as produções de Perq e Estudantes por ano | ## somando agora todas as produções de Perq e Estudantes por ano | ||
| Linha 136: | Linha 199: | ||
| <code R> | <code R> | ||
| require(lattice) | require(lattice) | ||
| + | |||
| + | # gráficos de dispersão | ||
| + | |||
| + | xyplot(Autores~Ano, data=ProdC) | ||
| + | xyplot(Autores~Ano, groups=Autor, data=ProdC) | ||
| + | xyplot(Autores~Ano, groups=Autor, data=ProdC, auto.key=TRUE) | ||
| + | xyplot(Autores~Ano, groups=Autor, data=ProdC, | ||
| + | auto.key=TRUE, type="b") | ||
| + | xyplot(Autores~Ano, groups=Autor, data=ProdC, | ||
| + | auto.key=TRUE, type=c("p","smooth")) | ||
| + | |||
| + | xyplot(Nacional+Internacional~Ano|Autor, data=ProdC) | ||
| + | xyplot(Nacional+Internacional~Ano|Autor, data=ProdC, | ||
| + | auto.key=TRUE, type=c("p","smooth")) | ||
| + | xyplot(Nacional+Internacional~Ano|Autor, data=ProdC, | ||
| + | auto.key=TRUE, type=c("p","r")) | ||
| + | xyplot(Nacional+Internacional~Ano|Autor, data=ProdC, | ||
| + | auto.key=TRUE, type=c("p","r","g")) | ||
| + | |||
| + | #------------------------------------------------------------------------------------------ | ||
| + | # gráficos de barras | ||
| + | |||
| + | str(ProdC) | ||
| + | barchart(Autores~Ano, groups=Autor, data=ProdC, horizontal=FALSE) | ||
| + | barchart(Nacional+Internacional~Ano|Autor, data=ProdC, horizontal=FALSE) | ||
| + | |||
| + | require(reshape) | ||
| + | ProdC2 <- melt(ProdC, id=c("Ano","Autor")) | ||
| + | str(ProdC2) | ||
| + | |||
| + | barchart(value~Ano|variable, groups=Autor, data=ProdC2, horizontal=FALSE) | ||
| + | barchart(value~Ano|variable, groups=Autor, data=ProdC2, | ||
| + | horizontal=FALSE, scales="free") | ||
| + | barchart(value~Ano|variable, groups=Autor, data=ProdC2, | ||
| + | horizontal=FALSE, scales=list(x="same", y="free")) | ||
| + | barchart(value~Autor|Ano, groups=variable, data=ProdC2, horizontal=FALSE) | ||
| + | barchart(value~Autor|factor(Ano), groups=variable, data=ProdC2, horizontal=FALSE) | ||
| + | barchart(value~Autor|factor(Ano), groups=variable, data=ProdC2, | ||
| + | horizontal=FALSE, auto.key=TRUE) | ||
| + | barchart(value~Autor|factor(Ano), groups=variable, data=ProdC2, | ||
| + | horizontal=FALSE, auto.key=list(space="right")) | ||
| + | barchart(value~Autor|factor(Ano), groups=variable, data=ProdC2, | ||
| + | horizontal=FALSE, auto.key=list(columns=4)) | ||
| </code> | </code> | ||
| Linha 144: | Linha 250: | ||
| </code> | </code> | ||
| - | ## Outro exemplo.... | + | Outro exemplo: (novos elementos: dados faltantes, caracteres de decimais e milhares)\\ |
| - | ## Dados socio economicos --> 9.1 | + | Dados sócio econômicos --> Tabela 9.1 |
| + | <code R> | ||
| ScEc <- read.table("clipboard", dec=",", sep="\t", na.strings="\\u2026 ") | ScEc <- read.table("clipboard", dec=",", sep="\t", na.strings="\\u2026 ") | ||
| head(ScEc) | head(ScEc) | ||
| ScEc <- as.data.frame(lapply(pcPesq, ptMil)) | ScEc <- as.data.frame(lapply(pcPesq, ptMil)) | ||
| - | |||
| - | |||
| </code> | </code> | ||