[R-br] Assunto: Classificar um conjunto de dados
Yury Duarte
yurynepomuceno em gmail.com
Qua Nov 7 11:29:54 -02 2018
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> 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
> 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> 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> 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
>>> 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
>>> 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
>> 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
> 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/20181107/20cbbe1b/attachment.html>
Mais detalhes sobre a lista de discussão R-br