[R-br] Assunto: Classificar um conjunto de dados

Fernando Souza nandodesouza em gmail.com
Sex Nov 9 20:19:59 -02 2018


Muito boa solução.!
On Nov 9 2018, at 7:54 pm, Jônatan por (R-br) <r-br em listas.c3sl.ufpr.br> wrote:
>
> Com os dados estruturados pelo Fernando, tentei com 2 alternativas:
>
> # versão com tidyverse
> library(dplyr); library(lubridate)
> res_dplyr <- dados %>%
>
> group_by(ano = year(Data), Local) %>%
> arrange(desc(Frequencia), desc(Data), desc(qtde)) %>%
> slice(1) %>%
> ungroup()
> res_dplyr
>
> # versão base do R
> res_base <- lapply(
> split(dados, f = list(dados$Local, year(dados$Data))),
> function(x) {
> o <- with(x, order(Frequencia, Data, qtde, decreasing = TRUE))
> x[o, ][1, ]
> }
> )
> res_base <- do.call(rbind, res_base)
> res_base
>
> Att.
> On Thu, Nov 8, 2018 at 9:47 PM Edson Lira por (R-br) <r-br em listas.c3sl.ufpr.br (mailto:r-br em listas.c3sl.ufpr.br)> wrote:
> > ###################CONTAGEM DE DOADORES###########################
> > #COM ESSA ROTINA ABAIXO, VC ORDENA DO MAIOR PARA O MAIOR AS DUAS VARIÁVEIS
> > d_cad0_10<- tip_doa[order(tip_doa$NUMEROGENTE,tip_doa$DATAHORADOACAO, decreasing=TRUE) ,]
> >
> > NA ROTINA ABAIXO VC MANTEM AS DUPLICADAS E MANTEM SOMENTE A DE MAIOR FREQUÊNCIA
> > dc_0_10<- d_cad0_10[!duplicated(d_cad0_10$NUMEROGENTE),]
> >
> >
> >
> > USEI ESSA ROTINA EM UM BANCO DE DOADORES AQUI DE MANAUS PARA MANTER SOMENTE SOMENTE ELE UMA VEZ, E COMO ORDENEI ELE MANTINHA O PRIMEIRO REGISTRO DOS DUPLICADOS E O PRIMEIRO ERA O DE MAIOR FREQUÊNCIA. ACHO QUE ERA ISSO.
> >
> > TESTE ESSA.
> >
> >
> >
> > [ ]'s
> > Prof. Edson Lira, Me
> > Estatístico
> > Manaus-Amazonas
> >
> >
> >
> >
> > Em quinta-feira, 8 de novembro de 2018 18:29:43 AMT, Fernando Souza por (R-br) <r-br em listas.c3sl.ufpr.br (mailto:r-br em listas.c3sl.ufpr.br)> escreveu:
> >
> >
> > Cara criei esse comando que aproxima bem do que você deseja,
> > Porém a última situaçao (Local=D) não estou conseguindo programar, veja se tem alguma idéia que possa complementar.
> >
> > att
> > dados<-data.frame(Local=c('A','A','A','B','C','C','C','C','D','D'),Frequencia=c(2,2,1,3,5,5,5,5,3,4),Data=c("13/05/2015","13/05/2015","13/05/2015","13/05/2015","13/05/2015","10/05/2015","13/05/2015","13/05/2015","13/05/2015","13/05/2015"),qtde=c(500,700,700,400,300,400,400,900,550,500))
> > dados$Data <-as.Date(dados$Data,"%d/%m/%Y")
> > str(dados)
> > dados
> >
> > # install.packages("plyr")
> > library(plyr)
> >
> > arranjo<-function(x){
> > valido <- c()
> > for(i in 1:nrow(x)){
> > if(x[i,2]==max(x[,2])){
> > valido[i]<-1
> > if( x[i,3]>= max(x[,3]) & x[i,2]==max(x[,2])){
> >
> > valido[i] <-1
> > }else{
> >
> > valido[i] <- 0
> > }
> > if(x[i,4]>= max(x[,4])){
> > valido[i] <- 1
> > }else{
> >
> > valido[i] <- 0
> > }
> > }else{
> > valido[i]=0
> > }
> > }
> > return(mutate(x,valido=valido))
> > }
> >
> > ddply(dados,.(Local, Data),arranjo)
> >
> >
> >
> > On Nov 7 2018, at 11:29 am, Yury Duarte por (R-br) <r-br em listas.c3sl.ufpr.br (mailto:r-br em listas.c3sl.ufpr.br)> wrote:
> > >
> > > Olá Daniel!
> > >
> > > Utilizei a abordagem que você sugeriu e criei dois laços para fazer a checagem.
> > > Ainda não está exatamente como gostaria mas o filtro já está sendo feito da maneira que preciso.
> > > Segue a estrutura utilizada.
> > >
> > > Obrigado!
> > >
> > > Abraços
> > >
> > > dados:
> > > area_id dia mes ano frequencia valor
> > > a 15 12 2012 10 5
> > > a 22 12 2012 15 10
> > > a 15 12 2012 12 15
> > > a 24 11 2013 15 20
> > > b 8 12 2013 10 5
> > > b 14 10 2012 12 10
> > > c 7 11 2012 15 5
> > > c 19 11 2013 12 10
> > > c 19 10 2014 12 15
> > > c 19 10 2013 15 20
> > > d 5 10 2014 10 5
> > > d 23 10 2014 10 10
> > > d 5 12 2012 10 15
> > > d 5 12 2012 15 20
> > > d 5 12 2013 12 25
> > > d 6 11 2014 12 30
> > >
> > >
> > > estrutura:
> > > #--------------------Remover Objetos do R--------------------#
> > > rm(list = ls())
> > > set.seed(29031989)
> > >
> > > raiz = 'C:\\Users\\Desktop\\'
> > > a = read.table(paste0(raiz, 'teste_classificacao_final.txt'), header = T, sep = '\t')
> > > colunas = colnames(a)
> > > locais = data.frame(unique(a$area_id))
> > >
> > > for (i in 1:length(locais[,1])){
> > > #nome = paste0("area_", locais[i,1])
> > > #area = assign(nome, a[which(a$area_id==locais[i,1]),])
> > > area = a[which(a$area_id==locais[i,1]),]
> > > anos = data.frame(unique(area$ano))
> > >
> > > for (x in 1:length(anos[,1])) {
> > > area_ano = area[which(area$ano==anos[x,1]),]
> > > frequencia_max = max(area_ano$frequencia)
> > > valor_max = max(area_ano$valor)
> > > area_ano_freq = area_ano[which(area_ano$frequencia==frequencia_max),]
> > > area_ano_freq_val = area_ano_freq[which(area_ano_freq$frequencia==frequencia_max),]
> > >
> > > write.table(area_ano_freq_val, paste0(raiz, 'teste', '.txt'), sep = "\t", append = T, col.names = F, row.names = F)
> > >
> > > }
> > > }
> > >
> > > b = read.table(paste0(raiz, 'teste.txt'), header = F, sep = '\t')
> > > colnames(b) = colunas
> > >
> > > Yury Duarte
> > > Engenheiro Agrônomo - ESALQ/USP
> > >
> > >
> > >
> > >
> > >
> > > Em qua, 7 de nov de 2018 às 09:26, Daniel Guimarães Tiezzi por (R-br) <r-br em listas.c3sl.ufpr.br (mailto:r-br em listas.c3sl.ufpr.br)> escreveu:
> > > > Uma opção eh usar Uma estrutura de repetição para checar as variaveis e retornar o valor q deseja
> > > >
> > > > Daniel
> > > > On Wed, 7 Nov 2018, 09:22 Yury Duarte por (R-br) <r-br em listas.c3sl.ufpr.br (mailto:r-br em listas.c3sl.ufpr.br) wrote:
> > > > > Bom dia colegas listeiros,
> > > > >
> > > > > Edson, agradeço pela dica! Já tinha me esquecido da possibilidade de utilizar aggregate nos meus comandos.
> > > > > Entretanto, tentei utilizar a função sugerida para resolver o problema mas não consegui adapta-la para a minha necessidade.
> > > > > Quando utilizo o aggregate ele me pede uma 'function' para ser aplicada aos dados, de acordo com a ordem de agrupamento estabelecida dentro do argumento 'by', mas não não consegui adaptar uma função que me retornasse um boleano de mesmo valor/significado da coluna 'valido' (que gerei manualmente para validar os resultados do código). Consegui agregar os locais por área e por data quando pedi para retornar a média das frequências ou das quantidades, mas isso não me ajuda muito no momento.
> > > > >
> > > > >
> > > > > aggregate(dados$local, by = list(dados$data), 'função')
> > > > >
> > > > > Desde já, agradeço pela ajuda de todos!
> > > > >
> > > > > Yury Duarte
> > > > > Engenheiro Agrônomo - ESALQ/USP
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > Em ter, 6 de nov de 2018 às 18:21, Edson Lira por (R-br) <r-br em listas.c3sl.ufpr.br (mailto:r-br em listas.c3sl.ufpr.br)> escreveu:
> > > > > > Dá uma olhada no aggregate
> > > > > >
> > > > > > Enviado do Yahoo Mail no Android (https://go.onelink.me/107872968?pid=InProduct&c=Global_Internal_YGrowth_AndroidEmailSig__AndroidUsers&af_wl=ym&af_sub1=Internal&af_sub2=Global_YGrowth&af_sub3=EmailSignature)
> > > > > > > <div>Em ter, 6 6e nov 6e 2018 às 15:25, Yury Duarte por (R-br)</div><div><r-br em listas.c3sl.ufpr.br (mailto:r-br em listas.c3sl.ufpr.br)> escreveu:</div>
> > > > > > > Boa tarde colegas listeiros, como vão?
> > > > > > >
> > > > > > > Tenho um problema e estou com certa dificuldade em resolver de forma prática. Meu conjunto de dados é o seguinte:
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > local
> > > > > > > frequencia
> > > > > > > data
> > > > > > > quantidade
> > > > > > > valido
> > > > > > >
> > > > > > > A
> > > > > > > 2
> > > > > > > 13/05/2015
> > > > > > > 500,00
> > > > > > > 0
> > > > > > >
> > > > > > > A
> > > > > > > 2
> > > > > > > 13/05/2015
> > > > > > > 700,00
> > > > > > > 1
> > > > > > >
> > > > > > > A
> > > > > > > 1
> > > > > > > 13/05/2015
> > > > > > > 700,00
> > > > > > > 0
> > > > > > >
> > > > > > > B
> > > > > > > 3
> > > > > > > 13/05/2015
> > > > > > > 400,00
> > > > > > > 1
> > > > > > >
> > > > > > > C
> > > > > > > 5
> > > > > > > 13/05/2015
> > > > > > > 300,00
> > > > > > > 0
> > > > > > >
> > > > > > > C
> > > > > > > 5
> > > > > > > 10/05/2015
> > > > > > > 400,00
> > > > > > > 0
> > > > > > >
> > > > > > > C
> > > > > > > 5
> > > > > > > 13/05/2016
> > > > > > > 400,00
> > > > > > > 1
> > > > > > >
> > > > > > > C
> > > > > > > 5
> > > > > > > 13/05/2015
> > > > > > > 900,00
> > > > > > > 1
> > > > > > >
> > > > > > > D
> > > > > > > 3
> > > > > > > 13/05/2015
> > > > > > > 550,00
> > > > > > > 0
> > > > > > >
> > > > > > > D
> > > > > > > 4
> > > > > > > 13/05/2015
> > > > > > > 500,00
> > > > > > > 1
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > Para esse conjunto, gostaria de gerar a coluna 'valida', que me classifica os dados da seguinte maneira: para cada local e para cada ano, retornar apenas o local de maior frequência, mais recente e de maior quantidade (nessa ordem).
> > > > > > > Pensei em gerar um objeto para cada local a partir do which(), mas como meu conjunto de dados tem mais de 150 mil linhas e mais de 2000 locais, achei que essa abordagem não seria muito prática nem rápida de ser processada.
> > > > > > >
> > > > > > > Desde já, agradeço pela colaboração de todos!
> > > > > > >
> > > > > > > Att
> > > > > > >
> > > > > > > Yury Duarte
> > > > > > > Engenheiro Agrônomo - ESALQ/USP
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > _______________________________________________
> > > > > > > R-br mailing list
> > > > > > > R-br em listas.c3sl.ufpr.br (mailto:R-br em 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 em listas.c3sl.ufpr.br (mailto:R-br em 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 em listas.c3sl.ufpr.br (mailto:R-br em 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 em listas.c3sl.ufpr.br (mailto:R-br em 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 em listas.c3sl.ufpr.br (mailto:R-br em 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 em listas.c3sl.ufpr.br (mailto:R-br em 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 em listas.c3sl.ufpr.br (mailto:R-br em 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.
>
>
>
>
> --
> ###############################################################
> ## Jônatan Dupont Tatsch
>
> ## Professor do Departamento de Física
> ## Centro de Ciências Exatas e Naturais (CCNE)
>
> ## Universidade Federal de Santa Maria - UFSM
> ## Faixa de Camobi, Prédio 13 - Campus UFSM - Santa Maria, RS, Brasil - 97105-900
>
> ## Telefone: +55(55)33012083
>
> ## www.ufsm.br/meteorologia (http://www.ufsm.br/meteorologia)
> ###############################################################
>
>
>
>
>
>
> _______________________________________________
> R-br mailing list
> R-br em 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.
>

-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20181109/d6783668/attachment-0001.html>


Mais detalhes sobre a lista de discussão R-br