
Prezados, Para contar os horários ou dias sem observações na estação meteorológica, dados faltantes. Fiz um “for” no R: c=comprimento do vetor teórico (sequencia de datas e horários que deveriam existir observações). h= comprimento dos dados das estações (pode haver horários ou dias seguidos sem observações). igual=0 for (m in 1:c){ for (jj in 1:h){ if ((bancof[m,1] == obsf[jj,1]) & (bancof[m,2] == obsf[jj,2]) ) {igual = igual+1} } } faltantes = c-igual coluna 1 é data dd/mm/aaaa e coluna 2 horário (0, 12, 18) Mas ele está demorado: uns 20 minutos por estação (pois elas têm umas 60.000 observações). Eu tenho umas 200 estações. Serão quatro dias, só para os dados do Brasil, têm ainda outros países da América do Sul. Será que existe alguma função no R que faça isto mais depressa? Obrigada, -- Helena Turon Balbino Meteorologista Instituto Nacional de Meteorologia - INMET 7º DISTRITO DE METEOROLOGIA (SP e MS) Tel: (11) 5051-5700 ********************************************************

?bigmemory Eu acho que isso pode te ajudar. outra informação que você deve postar é a configuração de seu pc. [. ]'s. Edson Lira Estatístico Ma-Am Em 19/04/2013, às 19:03, Helena Turon <helena.turon@gmail.com> escreveu:
Prezados,
Para contar os horários ou dias sem observações na estação meteorológica, dados faltantes. Fiz um “for” no R:
c=comprimento do vetor teórico (sequencia de datas e horários que deveriam existir observações). h= comprimento dos dados das estações (pode haver horários ou dias seguidos sem observações).
igual=0
for (m in 1:c){ for (jj in 1:h){ if ((bancof[m,1] == obsf[jj,1]) & (bancof[m,2] == obsf[jj,2]) ) {igual = igual+1} } }
faltantes = c-igual
coluna 1 é data dd/mm/aaaa e coluna 2 horário (0, 12, 18)
Mas ele está demorado: uns 20 minutos por estação (pois elas têm umas 60.000 observações). Eu tenho umas 200 estações. Serão quatro dias, só para os dados do Brasil, têm ainda outros países da América do Sul.
Será que existe alguma função no R que faça isto mais depressa?
Obrigada,
-- Helena Turon Balbino Meteorologista Instituto Nacional de Meteorologia - INMET 7º DISTRITO DE METEOROLOGIA (SP e MS) Tel: (11) 5051-5700 ******************************************************** _______________________________________________ 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.

Um exemplo pequeno e reproduzível vai ajudar a te ajudar... --- Fernando de Pol Mayer Doutorando em Estatística e Experimentação Agronômica Escola Superior de Agricultura "Luiz de Queiroz" - ESALQ Universidade de São Paulo - USP URL: http://fernandomayer.github.com e-mail: fernando.mayer [@] {gmail.com, usp.br} 2013/4/19 Edson Lira <edinhoestat@yahoo.com.br>:
?bigmemory
Eu acho que isso pode te ajudar. outra informação que você deve postar é a configuração de seu pc.
[. ]'s. Edson Lira Estatístico Ma-Am
Em 19/04/2013, às 19:03, Helena Turon <helena.turon@gmail.com> escreveu:
Prezados,
Para contar os horários ou dias sem observações na estação meteorológica, dados faltantes. Fiz um “for” no R:
c=comprimento do vetor teórico (sequencia de datas e horários que deveriam existir observações).
h= comprimento dos dados das estações (pode haver horários ou dias seguidos sem observações).
igual=0
for (m in 1:c){
for (jj in 1:h){
if ((bancof[m,1] == obsf[jj,1]) & (bancof[m,2] == obsf[jj,2]) )
{igual = igual+1}
}
}
faltantes = c-igual
coluna 1 é data dd/mm/aaaa e
coluna 2 horário (0, 12, 18)
Mas ele está demorado: uns 20 minutos por estação (pois elas têm umas 60.000 observações). Eu tenho umas 200 estações.
Serão quatro dias, só para os dados do Brasil, têm ainda outros países da América do Sul.
Será que existe alguma função no R que faça isto mais depressa?
Obrigada,
-- Helena Turon Balbino Meteorologista Instituto Nacional de Meteorologia - INMET 7º DISTRITO DE METEOROLOGIA (SP e MS) Tel: (11) 5051-5700 ********************************************************
_______________________________________________ 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 pequena amostra dos dados ajudaria. Mas com certeza dá pra vetorizar isso, e talvez até usar o pacote data.table. Eu entendi que c é 60.000 e h 200? Talvez resolva o loop externo: bancof[,1] %in% obsf[1,1] & bancof[,2] %in% obsf[1,2] Isso deve retornar um vetor de True e False. Apenas some os T (ou os F) e você tem a sua resposta. Aí você pode passar um loop para cada um. Outra opção, se o "%in%" não funcionar, é usar o match. Por exemplo: is.na(match(bancof[,1] %in% obsf[1,1])) & is.na(match(bancof[,2] %in% obsf[1,2])) O match retorna NA quando não há match. Assim, com os is.na, vocÊ tem um vetor que é T onde não há match. Combinando os dois testes, vocÊ tem um vetor onde é T se não houver os dois matchs. Depois, basta dá um sum no vetor para ter a qtde que não há match. Como o h é de 200, um loop em h deve ser rápido. Mas creio que dá pra evitar um loop completamente, talvez pensando em termos de algebra linear e multiplicações de vetores, construindo alguma indicadora. MAs sem um exemplo reproduzível fica difícil ajudar. abçs M 2013/4/19 Helena Turon <helena.turon@gmail.com>
Prezados,
Para contar os horários ou dias sem observações na estação meteorológica, dados faltantes. Fiz um “for” no R:
c=comprimento do vetor teórico (sequencia de datas e horários que deveriam existir observações).
h= comprimento dos dados das estações (pode haver horários ou dias seguidos sem observações).
igual=0
for (m in 1:c){
for (jj in 1:h){
if ((bancof[m,1] == obsf[jj,1]) & (bancof[m,2] == obsf[jj,2]) )
{igual = igual+1}
}
}
faltantes = c-igual
coluna 1 é data dd/mm/aaaa e
coluna 2 horário (0, 12, 18)
Mas ele está demorado: uns 20 minutos por estação (pois elas têm umas 60.000 observações). Eu tenho umas 200 estações.
Serão quatro dias, só para os dados do Brasil, têm ainda outros países da América do Sul.
Será que existe alguma função no R que faça isto mais depressa?
Obrigada,
-- Helena Turon Balbino Meteorologista Instituto Nacional de Meteorologia - INMET 7º DISTRITO DE METEOROLOGIA (SP e MS) Tel: (11) 5051-5700 ********************************************************
_______________________________________________ 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.
-- Manoel Galdino https://sites.google.com/site/galdinomcz/

On 04/19/2013 08:03 PM, Helena Turon wrote: Helena olhando o núcleo do seu loop:
for (m in 1:c){ for (jj in 1:h){ if ((bancof[m,1] == obsf[jj,1]) & (bancof[m,2] == obsf[jj,2]) ) {igual = igual+1} } }
Parece existir 2 base de dados: banco e obs se você só que contar os omissos porque não usar apply apply(obs,2,function(x) sum(is.na(x))) apply(banco,2,function(x) sum(is.na(x))) []s Tura
participantes (5)
-
Bernardo Rangel Tura
-
Edson Lira
-
Fernando Mayer
-
Helena Turon
-
Manoel Galdino