Doubt in using data.table

1

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.

    
asked by anonymous 19.10.2018 / 14:38

0 answers