Muito boa solução.! On Nov 9 2018, at 7:54 pm, Jônatan por (R-br) <[email protected]> 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) > <[email protected] (mailto:[email protected])> 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) <[email protected] (mailto:[email protected])> > > 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) > > <[email protected] (mailto:[email protected])> 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) > > > <[email protected] (mailto:[email protected])> 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) > > > > <[email protected] (mailto:[email protected]) 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) > > > > > <[email protected] (mailto:[email protected])> 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><[email protected] > > > > > > > (mailto:[email protected])> 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 > > > > > > > [email protected] (mailto:[email protected]) > > > > > > > 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 > > > > > > [email protected] (mailto:[email protected]) > > > > > > 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 > > > > > [email protected] (mailto:[email protected]) > > > > > 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 > > > > [email protected] (mailto:[email protected]) > > > > 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 > > > [email protected] (mailto:[email protected]) > > > 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 > > [email protected] (mailto:[email protected]) > > 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 > > [email protected] (mailto:[email protected]) > > 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 > [email protected] > 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 [email protected] 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.
