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.
Ambos lados da revisão anterior Revisão anterior | |||
cursos:mct:exemplo1a [2011/05/09 13:14] paulojus |
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> | ||