Good morning!
People, I need some help.
I worked out the routine below to update a data.table (dt). The execution was very slow so I suppressed the innermost loop and associated the variable Resul directly in the data. table but did not work correctly.
How to associate variable Resul directly to data.table?
TOT_1 = "TOTAL CLASSE 1"
TOT_2 = "TOTAL CLASSE 2"
TOT_3 = "TOTAL CLASSE 3"
==== rotina muita lenta ======
setkey(dt,TIPO,VARIAVEL_1,VARIAVEL_2,VARIAVEL_3,CLASSE)
Filtro_3_A = Filtro_3 %>% filter(CONDICAO != "LIXO")
for ( i in 1 : Com_Periodos )
{
Periodo_Pesquisar = Meses_Pesquisa[i]
Ano_Pesquisar = as.integer(substr(Periodo_Pesquisar,05,08))
Mes_Pesquisar = as.integer(substr(Periodo_Pesquisar,10,11))
Coluna = (Ano_Pesquisar - 2007 ) * 12 + Mes_Pesquisar + 5
Filtro_3_B = Filtro_3_A %>% filter(!!rlang::sym(Periodo_Pesquisar) > 0 )
print(paste0(" .............................TIPO ... periodo ... ",Periodo_Pesquisar))
Resul = Filtro_3_B %>%
group_by (VAR_1 , VAR_2 , VAR_3) %>%
summarize( Distintos = n_distinct(CODIGO),
Total_Dias = sum(!!rlang::sym(Periodo_Pesquisar) ),
QUANTIDADE = n() )
Resul = as.data.frame(Resul)
Num_Linhas = nrow(Resultado)
for ( k in 1 : Num_Linhas )
{
dt[dt$TIPO == "TESTE" & dt$VARIAVEL_1== Resul[k,1] & dt$VARIAVEL_2 == Resul[k,2] & VARIAVEL_3 == Resul[k,3] & dt$CLASSE == TOT_1 , Coluna ] = Resul[k,4]
dt[dt$TIPO == "TESTE" & dt$VARIAVEL_1== Resul[k,1] & dt$VARIAVEL_2 == Resul[k,2] & VARIAVEL_3 == Resul[k,3] & dt$CLASSE == TOT_2 , Coluna ] = Resul[k,5]
dt[dt$TIPO == "TESTE" & dt$VARIAVEL_1== Resul[k,1] & dt$VARIAVEL_2 == Resul[k,2] & VARIAVEL_3 == Resul[k,3] & dt$CLASSE == TOT_3 , Coluna ] = Resul[k,6]
}
}
==== Rotina mais rápida sem o loop interno =====
TOT_1 = "TOTAL CLASSE 1"
TOT_2 = "TOTAL CLASSE 2"
TOT_3 = "TOTAL CLASSE 3"
setkey(dt,TIPO,VARIAVEL_1,VARIAVEL_2,VARIAVEL_3,CLASSE)
Filtro_3_A = Filtro_3 %>% filter(CONDICAO != "LIXO")
for ( i in 1 : Com_Periodos )
{
Periodo_Pesquisar = Meses_Pesquisa[i]
Ano_Pesquisar = as.integer(substr(Periodo_Pesquisar,05,08))
Mes_Pesquisar = as.integer(substr(Periodo_Pesquisar,10,11))
Coluna = (Ano_Pesquisar - 2007 ) * 12 + Mes_Pesquisar + 5
Filtro_3_B = Filtro_3_A %>% filter(!!rlang::sym(Periodo_Pesquisar) > 0 )
print(paste0(" .............................TIPO ... periodo ... ",Periodo_Pesquisar))
Resul = Filtro_3_B %>%
group_by (VAR_1 , VAR_2 , VAR_3) %>%
summarize( Distintos = n_distinct(CODIGO),
Total_Dias = sum(!!rlang::sym(Periodo_Pesquisar) ),
QUANTIDADE = n() )
Resul = as.data.frame(Resul)
dt[dt$TIPO == "TESTE" & dt$VARIAVEL_1== Resul[,1] & dt$VARIAVEL_2 == Resul[,2] & VARIAVEL_3 == Resul[,3] & dt$CLASSE == TOT_1 , Coluna ] = Resul[,4]
dt[dt$TIPO == "TESTE" & dt$VARIAVEL_1== Resul[,1] & dt$VARIAVEL_2 == Resul[,2] & VARIAVEL_3 == Resul[,3] & dt$CLASSE == TOT_2 , Coluna ] = Resul[,5]
dt[dt$TIPO == "TESTE" & dt$VARIAVEL_1== Resul[,1] & dt$VARIAVEL_2 == Resul[,2] & VARIAVEL_3 == Resul[,3] & dt$CLASSE == TOT_3 , Coluna ] = Resul[,6]
}
By removing the inner loop I can not properly associate the variables of the data.frame with those of the data.table.