
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

Dá uma olhada no aggregate Enviado do Yahoo Mail no Android <div>Em ter, 6 6e nov 6e 2018 às 15:25, Yury Duarte por (R-br)</div><div><r-br@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@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.

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@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@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@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.

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@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@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@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@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.
_______________________________________________ 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.

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@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@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@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@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@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.
_______________________________________________ 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.

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@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@listas.c3sl.ufpr.br (mailto:r-br@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@listas.c3sl.ufpr.br (mailto:r-br@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@listas.c3sl.ufpr.br (mailto:r-br@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_Andr...)
<div>Em ter, 6 6e nov 6e 2018 às 15:25, Yury Duarte por (R-br)</div><div><r-br@listas.c3sl.ufpr.br (mailto:r-br@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@listas.c3sl.ufpr.br (mailto: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 (mailto: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 (mailto: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 (mailto: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.

###################CONTAGEM DE DOADORES############################COM ESSA ROTINA ABAIXO, VC ORDENA DO MAIOR PARA O MAIOR AS DUAS VARIÁVEISd_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ÊNCIAdc_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. [ ]'sProf. 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@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@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 valora 15 12 2012 10 5a 22 12 2012 15 10a 15 12 2012 12 15a 24 11 2013 15 20b 8 12 2013 10 5b 14 10 2012 12 10c 7 11 2012 15 5c 19 11 2013 12 10c 19 10 2014 12 15c 19 10 2013 15 20d 5 10 2014 10 5d 23 10 2014 10 10d 5 12 2012 10 15d 5 12 2012 15 20d 5 12 2013 12 25d 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 DuarteEngenheiro Agrônomo - ESALQ/USP Em qua, 7 de nov de 2018 às 09:26, Daniel Guimarães Tiezzi por (R-br) <r-br@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@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 DuarteEngenheiro Agrônomo - ESALQ/USP Em ter, 6 de nov de 2018 às 18:21, Edson Lira por (R-br) <r-br@listas.c3sl.ufpr.br> escreveu: Dá uma olhada no aggregate Enviado do Yahoo Mail no Android <div>Em ter, 6 6e nov 6e 2018 às 15:25, Yury Duarte por (R-br)</div><div><r-br@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 DuarteEngenheiro Agrônomo - ESALQ/USP_______________________________________________R-br mailing listR-br@listas.c3sl.ufpr.brhttps://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-brLeia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo m�nimo reproduz�vel. _______________________________________________R-br mailing listR-br@listas.c3sl.ufpr.brhttps://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-brLeia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível. _______________________________________________R-br mailing listR-br@listas.c3sl.ufpr.brhttps://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-brLeia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível. _______________________________________________R-br mailing listR-br@listas.c3sl.ufpr.brhttps://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-brLeia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível. _______________________________________________R-br mailing listR-br@listas.c3sl.ufpr.brhttps://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-brLeia 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.

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@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@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@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@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@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@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@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@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.
_______________________________________________ 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.
_______________________________________________ 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. _______________________________________________ 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.
-- ############################################################### ## 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 ###############################################################

Muito boa solução.! On Nov 9 2018, at 7:54 pm, Jônatan por (R-br) <r-br@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@listas.c3sl.ufpr.br (mailto:r-br@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@listas.c3sl.ufpr.br (mailto:r-br@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@listas.c3sl.ufpr.br (mailto:r-br@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@listas.c3sl.ufpr.br (mailto:r-br@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@listas.c3sl.ufpr.br (mailto:r-br@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@listas.c3sl.ufpr.br (mailto:r-br@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_Andr...) > <div>Em ter, 6 6e nov 6e 2018 às 15:25, Yury Duarte por (R-br)</div><div><r-br@listas.c3sl.ufpr.br (mailto:r-br@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@listas.c3sl.ufpr.br (mailto: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 (mailto: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 (mailto: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 (mailto: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 (mailto: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 (mailto: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 (mailto: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.
-- ############################################################### ## 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@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.

Yuri, Talvez fornecer um conjunto de dados com o qual possamos trabalhar (e como sugerido no guia de postagem - http://www.leg.ufpr.br/doku.php/software:rbr?guia_de_postagem_da_r-br_em_c... ) te ajude a encontrar pessoas mais dispostas a te ajudarem. - fornecer CMR (código mínimo reproduzível), devidamente comentado e organizado com relação às dúvidas, passos, objetivos, desde a importação do arquivo à chamada de pacotes e aplicação das funções. Se a discussão é sobre a saída da função, cole na integra dentro do corpo da mensagem. Nestes casos, usar fonte monoespaçadas para preservar a estrutura do código. Em alguns casos forneça o sessionInfo(). Estamos para ajudar e não fazer todo o seu trabalho! - caso você precise fornecer dados, considere a opção de hospeda-los em algum site (e.g. http://www.datafilehost.com/ é grátis e não requer registro) e fornecer o link para importação dos dados, de preferência dentro do próprio CMR (e.g. read.table(" http://www.datafilehost.com/get.php?file=3f373ba4", …)). Mais maneiras de armazenar dados na internet http://www.freewebspace.net/free/Free-file-hosting -- Marcus Nunes Professor Adjunto Universidade Federal do Rio Grande do Norte Centro de Ciências Exatas e da Terra Departamento de Estatística Laboratório de Estatística Aplicada marcus.nunes@ccet.ufrn.br https://marcusnunes.me/ On Wed, Nov 7, 2018 at 8:22 AM Yury Duarte por (R-br) < r-br@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@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@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@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.
_______________________________________________ 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 (6)
-
Daniel Guimarães Tiezzi
-
Edson Lira
-
Fernando Souza
-
Jônatan
-
Marcus Nunes
-
Yury Duarte