
Pessoal, o Fernando me ajudou a agregar com 2 variáveis. Agora preciso agregar estratificando. Ou seja, idade=c("1","3","2","2","1","2","1","3","1","3") sexo <- c("1","1","2","2","1","2","1","1","1","1") tcont <- c(100,320,24,256,134,290,18,34,15,121) read <- c("s","n","n","n","s","s","s","n","n","s") dados <- data.frame(sexo,tcont,read) dados dados$read <- as.numeric(ifelse(read == 's', 1, 0)) dados Agora quero que o resultado fique assim: sexo idade tcont read 1 1 1 2 1 2 3 1 3 4 2 1 5 2 2 6 2 3 O tcont será a soma e a coluna de read terá a quantidade de readmissões estratificada. Alguém pode me ajudar? Obrigada Fátima -- "Minha felicidade depende da qualidade dos meus pensamentos"

Da para fazer com o aggregate() que nem te falaram antes, só acrescentando mais um critério no parâmetro by (no proprio help tem exemplo de agregações por 2 variaveis...), ou com o by() idade=c("1","3","2","2","1","2","1","3","1","3") sexo <- c("1","1","2","2","1","2","1","1","1","1") tcont <- c(100,320,24,256,134,290,18,34,15,121) read <- c("s","n","n","n","s","s","s","n","n","s") dados <- data.frame(idade, sexo,tcont,read) by(dados, list(dados$sexo, dados$idade), function(x) data.frame(sexo=x$sexo[1], idade=x$idade[1], tcont=sum(x$tcont), read=sum(x$read == 's'))) Pra fazer tudo ficar num só data.frame, da para usar do.call() do.call(rbind, by(dados, list(dados$sexo, dados$idade), function(x) data.frame(sexo=x$sexo[1], idade=x$idade[1], tcont=sum(x$tcont), read=sum(x$read == 's')))) Não tem todas combinações sexo-idade pq nos dados que tu deu como exemplo eles não aparecem 2013/10/4 Fátima Lima Paula <fatima.lima.paula@gmail.com>
Pessoal, o Fernando me ajudou a agregar com 2 variáveis. Agora preciso agregar estratificando. Ou seja,
idade=c("1","3","2","2","1","2","1","3","1","3") sexo <- c("1","1","2","2","1","2","1","1","1","1") tcont <- c(100,320,24,256,134,290,18,34,15,121) read <- c("s","n","n","n","s","s","s","n","n","s")
dados <- data.frame(sexo,tcont,read) dados
dados$read <- as.numeric(ifelse(read == 's', 1, 0))
dados
Agora quero que o resultado fique assim:
sexo idade tcont read 1 1 1 2 1 2 3 1 3 4 2 1 5 2 2 6 2 3
O tcont será a soma e a coluna de read terá a quantidade de readmissões estratificada. Alguém pode me ajudar? Obrigada Fátima
-- "Minha felicidade depende da qualidade dos meus pensamentos"
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Sensacional, Rodrigo. Muitíssimo obrigada. Fátima Em 4 de outubro de 2013 10:30, Rodrigo Coster <rcoster@gmail.com> escreveu:
Da para fazer com o aggregate() que nem te falaram antes, só acrescentando mais um critério no parâmetro by (no proprio help tem exemplo de agregações por 2 variaveis...), ou com o by()
idade=c("1","3","2","2","1","2","1","3","1","3") sexo <- c("1","1","2","2","1","2","1","1","1","1") tcont <- c(100,320,24,256,134,290,18,34,15,121) read <- c("s","n","n","n","s","s","s","n","n","s") dados <- data.frame(idade, sexo,tcont,read)
by(dados, list(dados$sexo, dados$idade), function(x) data.frame(sexo=x$sexo[1], idade=x$idade[1], tcont=sum(x$tcont), read=sum(x$read == 's')))
Pra fazer tudo ficar num só data.frame, da para usar do.call()
do.call(rbind, by(dados, list(dados$sexo, dados$idade), function(x) data.frame(sexo=x$sexo[1], idade=x$idade[1], tcont=sum(x$tcont), read=sum(x$read == 's'))))
Não tem todas combinações sexo-idade pq nos dados que tu deu como exemplo eles não aparecem
2013/10/4 Fátima Lima Paula <fatima.lima.paula@gmail.com>
Pessoal, o Fernando me ajudou a agregar com 2 variáveis. Agora preciso agregar estratificando. Ou seja,
idade=c("1","3","2","2","1","2","1","3","1","3") sexo <- c("1","1","2","2","1","2","1","1","1","1") tcont <- c(100,320,24,256,134,290,18,34,15,121) read <- c("s","n","n","n","s","s","s","n","n","s")
dados <- data.frame(sexo,tcont,read) dados
dados$read <- as.numeric(ifelse(read == 's', 1, 0))
dados
Agora quero que o resultado fique assim:
sexo idade tcont read 1 1 1 2 1 2 3 1 3 4 2 1 5 2 2 6 2 3
O tcont será a soma e a coluna de read terá a quantidade de readmissões estratificada. Alguém pode me ajudar? Obrigada Fátima
-- "Minha felicidade depende da qualidade dos meus pensamentos"
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- "Minha felicidade depende da qualidade dos meus pensamentos"

----- Mensagem encaminhada ----- De: Rodrigo Coster <rcoster@gmail.com> Para: "r-br@listas.c3sl.ufpr.br" <r-br@listas.c3sl.ufpr.br> Enviadas: Sexta-feira, 4 de Outubro de 2013 10:30 Assunto: Re: [R-br] (sem assunto) Da para fazer com o aggregate() que nem te falaram antes, só acrescentando mais um critério no parâmetro by (no proprio help tem exemplo de agregações por 2 variaveis...), ou com o by() idade=c("1","3","2","2","1","2","1","3","1","3") sexo <- c("1","1","2","2","1","2","1","1","1","1") tcont <- c(100,320,24,256,134,290,18,34,15,121) read <- c("s","n","n","n","s","s","s","n","n","s") dados <- data.frame(idade, sexo,tcont,read) by(dados, list(dados$sexo, dados$idade), function(x) data.frame(sexo=x$sexo[1], idade=x$idade[1], tcont=sum(x$tcont), read=sum(x$read == 's'))) Pra fazer tudo ficar num só data.frame, da para usar do.call() do.call(rbind, by(dados, list(dados$sexo, dados$idade), function(x) data.frame(sexo=x$sexo[1], idade=x$idade[1], tcont=sum(x$tcont), read=sum(x$read == 's')))) Não tem todas combinações sexo-idade pq nos dados que tu deu como exemplo eles não aparecem 2013/10/4 Fátima Lima Paula <fatima.lima.paula@gmail.com> Pessoal, o Fernando me ajudou a agregar com 2 variáveis. Agora preciso agregar estratificando. Ou seja,
idade=c("1","3","2","2","1","2","1","3","1","3") sexo <- c("1","1","2","2","1","2","1","1","1","1") tcont <- c(100,320,24,256,134,290,18,34,15,121) read <- c("s","n","n","n","s","s","s","n","n","s")
dados <- data.frame(sexo,tcont,read) dados
dados$read <- as.numeric(ifelse(read == 's', 1, 0))
dados
Agora quero que o resultado fique assim:
sexo idade tcont read 1 1 1 2 1 2 3 1 3 4 2 1 5 2 2 6 2 3
O tcont será a soma e a coluna de read terá a quantidade de readmissões estratificada. Alguém pode me ajudar? Obrigada Fátima
--
"Minha felicidade depende da qualidade dos meus pensamentos"
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

A aggregate() faz a mesma coisa de uma forma mais sofisticada. aggregate(cbind(tcont,read)~sexo+idade, data=dados, FUN=sum) Mais opções estão disponíveis com as funções do pacote plyr, como require(plyr) ddply(dados, .(sexo,idade), summarise, tcont=sum(tcont), read=sum(read)) onde você pode usar funções diferentes para cada variável ou até usar mais de uma vez uma mesma variável. À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 skype: walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================

walmes, uma pergunta. é possível ter diferentes funções no aggregate? uma para cada tipo de variável? imagine quer contar em uma e somar em outra (como numa query padrão sql) Abs Vinicius Em 10 de outubro de 2013 18:11, walmes . <walmeszeviani@gmail.com> escreveu:
A aggregate() faz a mesma coisa de uma forma mais sofisticada.
aggregate(cbind(tcont,read)~sexo+idade, data=dados, FUN=sum)
Mais opções estão disponíveis com as funções do pacote plyr, como
require(plyr) ddply(dados, .(sexo,idade), summarise, tcont=sum(tcont), read=sum(read))
onde você pode usar funções diferentes para cada variável ou até usar mais de uma vez uma mesma variável.
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 skype: walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- *Vinicius Brito Rocha.* *Estatístico e Atuário ** M.Sc. Engenharia de Produção/PO*

Os testes que fiz apontam que não. Na aggregate() você passa uma única função que é aplicada à todas as variáveis. Essa função pode retornar 1 ou mais valores como a range() e a fivenum() fazem. Nesse caso, das que conheço, a mais indicada seria a ddply() conforme eu exemplifiquei. Não descarto a possibilidade de já haver funções que operem com uma função para cada variável, eu apenas não conheço/lembro. À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 skype: walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================

Vinícius, não sei se é isso que você quer, mas eu fiz da seguinte forma: sexo=c("1","1","2","2","1","2","1","1","1","1","2") idade=c("1","3","2","1","1","1","2","2","3","3","3") tcont=c(100,320,24,256,134,290,18,34,15,121,32) read=c("1","0","0","0","1","1","1","1","1","1","0") df=data.frame(sexo,idade,read,tcont) df sexo idade read tcont 1 1 1 1 100 2 1 3 0 320 3 2 2 0 24 4 2 1 0 256 5 1 1 1 134 6 2 1 1 290 7 1 2 1 18 8 1 2 1 34 9 1 3 1 15 10 1 3 1 121 11 2 3 0 32 lixo=do.call(rbind, by(df, list(df$sexo, df$idade), function(x) data.frame(sexo=x$sexo[1], idade=x$idade[1], tcont=mean(x$tcont), reads=sum(x$read == "1")))) sexo idade tcont reads 1 1 1 117 2 2 2 1 273 1 3 1 2 26 2 4 2 2 24 0 5 1 3 152 2 6 2 3 32 0 Acho que consegui pesquisando no google. Abs Fátima Em 10 de outubro de 2013 18:29, Vinicius Brito Rocha < viniciusbritor@gmail.com> escreveu:
walmes,
uma pergunta. é possível ter diferentes funções no aggregate? uma para cada tipo de variável?
imagine quer contar em uma e somar em outra (como numa query padrão sql)
Abs
Vinicius
Em 10 de outubro de 2013 18:11, walmes . <walmeszeviani@gmail.com>escreveu:
A aggregate() faz a mesma coisa de uma forma mais sofisticada.
aggregate(cbind(tcont,read)~sexo+idade, data=dados, FUN=sum)
Mais opções estão disponíveis com as funções do pacote plyr, como
require(plyr) ddply(dados, .(sexo,idade), summarise, tcont=sum(tcont), read=sum(read))
onde você pode usar funções diferentes para cada variável ou até usar mais de uma vez uma mesma variável.
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 skype: walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- *Vinicius Brito Rocha.* *Estatístico e Atuário ** M.Sc. Engenharia de Produção/PO*
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- "Minha felicidade depende da qualidade dos meus pensamentos"

Existe ainda uma outra alternativa nesse caso que é o uso do data.table: sexo=c("1","1","2","2","1","2","1","1","1","1","2") idade=c("1","3","2","1","1","1","2","2","3","3","3") tcont=c(100,320,24,256,134,290,18,34,15,121,32) read=c("1","0","0","0","1","1","1","1","1","1","0") df=data.frame(sexo,idade,read,tcont) require(data.table) dt <- data.table(df) dt[,list(soma=sum(tcont), count=.N), by=list(idade,sexo)] que é equivalente a : ddply(dados, .(idade, sexo), summarize, soma=sum(tcont), count = length(tcont)) ambos com saída: idade sexo soma count 1: 1 1 267 4 2: 2 2 570 3 3: 3 1 475 3 O data.table tem uma grande vantagem sobre o plyr que é a velocidade. Quando o arquivo é muito grande ele pode chegar a ser 100x mais rápido. 2013/10/11 Fátima Lima Paula <fatima.lima.paula@gmail.com>
Vinícius, não sei se é isso que você quer, mas eu fiz da seguinte forma:
sexo=c("1","1","2","2","1","2","1","1","1","1","2") idade=c("1","3","2","1","1","1","2","2","3","3","3") tcont=c(100,320,24,256,134,290,18,34,15,121,32) read=c("1","0","0","0","1","1","1","1","1","1","0") df=data.frame(sexo,idade,read,tcont) df sexo idade read tcont 1 1 1 1 100 2 1 3 0 320 3 2 2 0 24 4 2 1 0 256 5 1 1 1 134 6 2 1 1 290 7 1 2 1 18 8 1 2 1 34 9 1 3 1 15 10 1 3 1 121 11 2 3 0 32
lixo=do.call(rbind, by(df, list(df$sexo, df$idade), function(x) data.frame(sexo=x$sexo[1], idade=x$idade[1], tcont=mean(x$tcont), reads=sum(x$read == "1")))) sexo idade tcont reads 1 1 1 117 2 2 2 1 273 1 3 1 2 26 2 4 2 2 24 0 5 1 3 152 2 6 2 3 32 0
Acho que consegui pesquisando no google. Abs Fátima
Em 10 de outubro de 2013 18:29, Vinicius Brito Rocha < viniciusbritor@gmail.com> escreveu:
walmes,
uma pergunta. é possível ter diferentes funções no aggregate? uma para cada tipo de variável?
imagine quer contar em uma e somar em outra (como numa query padrão sql)
Abs
Vinicius
Em 10 de outubro de 2013 18:11, walmes . <walmeszeviani@gmail.com>escreveu:
A aggregate() faz a mesma coisa de uma forma mais sofisticada.
aggregate(cbind(tcont,read)~sexo+idade, data=dados, FUN=sum)
Mais opções estão disponíveis com as funções do pacote plyr, como
require(plyr) ddply(dados, .(sexo,idade), summarise, tcont=sum(tcont), read=sum(read))
onde você pode usar funções diferentes para cada variável ou até usar mais de uma vez uma mesma variável.
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 skype: walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218
==========================================================================
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- *Vinicius Brito Rocha.* *Estatístico e Atuário ** M.Sc. Engenharia de Produção/PO*
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- "Minha felicidade depende da qualidade dos meus pensamentos"
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Não consegui rodar o script, mesmo baixando a bibliotéca data.table dply(dados, .(idade, sexo), summarize, soma=sum(tcont), count = length(tcont)) Error: could not find function "ddply" Existe ainda uma outra alternativa nesse caso que é o uso do data.table: sexo=c("1","1","2","2","1","2","1","1","1","1","2") idade=c("1","3","2","1","1","1","2","2","3","3","3") tcont=c(100,320,24,256,134,290,18,34,15,121,32) read=c("1","0","0","0","1","1","1","1","1","1","0") df=data.frame(sexo,idade,read,tcont) require(data.table) dt <- data.table(df) dt[,list(soma=sum(tcont), count=.N), by=list(idade,sexo)]que é equivalente a :ddply(dados, .(idade, sexo), summarize, soma=sum(tcont), count = length(tcont))ambos com saída: idade sexo soma count 1: 1 1 267 4 2: 2 2 570 3 3: 3 1 475 3O data.table tem uma grande vantagem sobre o plyr que é a velocidade. Quando o arquivo é muito grande ele pode chegar a ser 100x mais rápido.

ddply() é da plyr, conforme está no CMR que eu enviei como 5 mensagem desse subject. À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 skype: walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================

Desculpe mas foi um erro meu. No data.table tem que usar o setkey() antes para definir qual campo(os) vão ser as chaves. sexo=c("1","1","2","2","1","2","1","1","1","1","2") idade=c("1","3","2","1","1","1","2","2","3","3","3") tcont=c(100,320,24,256,134,290,18,34,15,121,32) read=c("1","0","0","0","1","1","1","1","1","1","0") df=data.frame(sexo,idade,read,tcont) require(data.table) dt <- data.table(df) setkey(dt, sexo, idade) dt[,list(soma=sum(tcont), count=.N), by=list(idade,sexo)] rode esse código que funciona. Só uma ressalva: a solução com o plyr funciona, só que com o data.table é muito mais rápido com conjuntos grandes de dados. 2013/10/18 walmes . <walmeszeviani@gmail.com>
ddply() é da plyr, conforme está no CMR que eu enviei como 5 mensagem desse subject.
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 skype: walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
participantes (7)
-
Flavio Barros
-
Fátima Lima Paula
-
Maria de Fatima Ferreira Almeida
-
Mauro Sznelwar
-
Rodrigo Coster
-
Vinicius Brito Rocha
-
walmes .