Home > Back-end >  How to replace dataframe values by other dataframe values, keeping values ​that are equal to both in
How to replace dataframe values by other dataframe values, keeping values ​that are equal to both in

Time:02-11

I have two dataframes, toy1 and toy2. I would like to create a new dataframe, replacing the different values ​​that are in toy2 in toy1 and keeping the same values ​​(0) that are in toy1. Taking into account that there are different numbers of columns and rows. So in this example below, i want a result that is a dataframe of 208 columns and 2 rows.

toy1:

structure(list(revenue = 0, risk = 0, target_amount = 0, company_years = 0, 
approved_commitee = 0, score = 0, reason_Capital_giro = 0, 
reason_Compra_equip = 0, reason_Compra_estoque = 0, reason_Cons_div = 0, 
reason_Expansao = 0, reason_Outros = 0, reason_working_capital = 0, 
serasa_0 = 0, serasa_1 = 0, serasa_1.5 = 0, serasa_1.8 = 0, 
serasa_2 = 0, serasa_2.6 = 0, serasa_3 = 0, serasa_3.1 = 0, 
serasa_3.2 = 0, serasa_3.3 = 0, serasa_3.4 = 0, serasa_3.6 = 0, 
serasa_3.8 = 0, serasa_4 = 0, serasa_4.2 = 0, serasa_4.4 = 0, 
serasa_4.6 = 0, serasa_5 = 0, pontualidade_0.75neg = 0, pontualidade_0 = 0, 
pontualidade_0.25 = 0, pontualidade_0.75 = 0, pontualidade_2.25 = 0, 
pontualidade_2.5 = 0, pontualidade_2.75 = 0, pontualidade_3 = 0, 
pontualidade_3.25 = 0, pontualidade_3.5 = 0, pontualidade_3.75 = 0, 
pontualidade_4 = 0, pontualidade_4.25 = 0, pontualidade_4.5 = 0, 
pontualidade_4.75 = 0, pontualidade_5 = 0, qualidade_divida_0 = 0, 
qualidade_divida_1 = 0, qualidade_divida_1.4 = 0, qualidade_divida_1.6 = 0, 
qualidade_divida_2 = 0, qualidade_divida_2.2 = 0, qualidade_divida_2.8 = 0, 
qualidade_divida_3.4 = 0, qualidade_divida_3.5 = 0, qualidade_divida_3.7 = 0, 
qualidade_divida_3.8 = 0, qualidade_divida_4 = 0, qualidade_divida_4.2 = 0, 
qualidade_divida_4.5 = 0, qualidade_divida_4.6 = 0, qualidade_divida_4.8 = 0, 
qualidade_divida_5 = 0, bancabilidade_0 = 0, bancabilidade_0.1 = 0, 
bancabilidade_0.2 = 0, bancabilidade_0.5 = 0, bancabilidade_0.6 = 0, 
bancabilidade_0.7 = 0, bancabilidade_0.8 = 0, bancabilidade_1 = 0, 
bancabilidade_1.2 = 0, bancabilidade_1.3 = 0, bancabilidade_1.4 = 0, 
bancabilidade_1.5 = 0, bancabilidade_1.6 = 0, bancabilidade_1.7 = 0, 
bancabilidade_1.8 = 0, bancabilidade_2 = 0, bancabilidade_2.1 = 0, 
bancabilidade_2.2 = 0, bancabilidade_2.3 = 0, bancabilidade_2.4 = 0, 
bancabilidade_2.5 = 0, bancabilidade_2.6 = 0, bancabilidade_2.7 = 0, 
bancabilidade_2.8 = 0, bancabilidade_3 = 0, bancabilidade_3.1 = 0, 
bancabilidade_3.2 = 0, bancabilidade_3.3 = 0, bancabilidade_3.4 = 0, 
bancabilidade_3.5 = 0, bancabilidade_3.6 = 0, bancabilidade_3.8 = 0, 
bancabilidade_3.9 = 0, bancabilidade_4 = 0, bancabilidade_4.1 = 0, 
bancabilidade_4.2 = 0, bancabilidade_4.4 = 0, bancabilidade_4.5 = 0, 
bancabilidade_4.6 = 0, bancabilidade_4.7 = 0, bancabilidade_4.8 = 0, 
bancabilidade_5 = 0, alavancagem_0 = 0, alavancagem_0.2 = 0, 
alavancagem_1 = 0, alavancagem_1.6 = 0, alavancagem_2 = 0, 
alavancagem_2.4 = 0, alavancagem_2.5 = 0, alavancagem_3 = 0, 
alavancagem_3.4 = 0, alavancagem_4 = 0, alavancagem_5 = 0, 
porte_0 = 0, porte_1 = 0, porte_1.4 = 0, porte_2 = 0, porte_2.4 = 0, 
porte_2.8 = 0, porte_3 = 0, porte_3.2 = 0, porte_3.6 = 0, 
porte_4 = 0, porte_4.4 = 0, porte_4.6 = 0, porte_4.8 = 0, 
porte_5 = 0, receita_recorrencias_0.6 = 0, receita_recorrencias_0.8 = 0, 
receita_recorrencias_1 = 0, receita_recorrencias_1.4 = 0, 
receita_recorrencias_2 = 0, receita_recorrencias_2.4 = 0, 
receita_recorrencias_2.6 = 0, receita_recorrencias_3 = 0, 
receita_recorrencias_3.2 = 0, receita_recorrencias_3.4 = 0, 
receita_recorrencias_3.8 = 0, receita_recorrencias_4 = 0, 
receita_recorrencias_4.4 = 0, receita_recorrencias_5 = 0, 
respaldo_patrimonio_0 = 0, respaldo_patrimonio_0.4 = 0, respaldo_patrimonio_0.5 = 0, 
respaldo_patrimonio_0.7 = 0, respaldo_patrimonio_0.75 = 0, 
respaldo_patrimonio_0.8 = 0, respaldo_patrimonio_1 = 0, respaldo_patrimonio_1.2 = 0, 
respaldo_patrimonio_1.3 = 0, respaldo_patrimonio_1.4 = 0, 
respaldo_patrimonio_1.5 = 0, respaldo_patrimonio_1.7 = 0, 
respaldo_patrimonio_1.9 = 0, respaldo_patrimonio_2.2 = 0, 
respaldo_patrimonio_2.3 = 0, respaldo_patrimonio_2.6 = 0, 
respaldo_patrimonio_3 = 0, respaldo_patrimonio_3.2 = 0, respaldo_patrimonio_3.5 = 0, 
respaldo_patrimonio_3.6 = 0, respaldo_patrimonio_4 = 0, respaldo_patrimonio_4.4 = 0, 
respaldo_patrimonio_5 = 0, reputacional_1 = 0, reputacional_2 = 0, 
reputacional_2.5 = 0, reputacional_3 = 0, reputacional_3.5 = 0, 
reputacional_3.65 = 0, reputacional_4 = 0, reputacional_5 = 0, 
impacto_covid_1 = 0, impacto_covid_1.5 = 0, impacto_covid_2 = 0, 
impacto_covid_2.5 = 0, impacto_covid_3 = 0, impacto_covid_3.5 = 0, 
impacto_covid_3.65 = 0, impacto_covid_4 = 0, impacto_covid_5 = 0, 
business_sector_Comercio = 0, business_sector_Industria = 0, 
business_sector_Servicos = 0, state_AC = 0, state_AM = 0, 
state_BA = 0, state_CE = 0, state_DF = 0, state_GO = 0, state_MG = 0, 
state_MS = 0, state_MT = 0, state_PA = 0, state_PB = 0, state_PE = 0, 
state_PR = 0, state_RJ = 0, state_RS = 0, state_SC = 0, state_SP = 0, 
state_TO = 0, decision_motor_approved = 0, decision_motor_denied = 0), row.names = 1L, class = "data.frame")

toy2

 structure(list(revenue = c(4397487.34, 198019.75), risk = c(12137650.06, 
469506.24), target_amount = c(150000, 1e 05), company_years = c(18, 
9), approved_commitee = structure(c(2L, 2L), .Label = c("NO", 
"YES"), class = "factor"), score = c(134, 128), reason_Compra_equip = c(1, 
1), serasa_1.8 = c(1, 1), pontualidade_0.25 = c(1, 1), qualidade_divida_1 = c(1, 
1), bancabilidade_0.2 = c(1, 1), alavancagem_1.6 = c(1L, 1L), 
    porte_4.6 = c(1, 1), receita_recorrencias_3 = c(1, 1), respaldo_patrimonio_0.5 = c(1, 
    1), reputacional_5 = c(1, 1), impacto_covid_3 = c(1, 1), 
    business_sector_Comercio = c(1, 1), state_GO = c(1, 1)), row.names = c(10L, 
12L), class = "data.frame")

CodePudding user response:

Check this :

a <- which(names(toy1) %in% names(toy2))
toy1[2,] <- 0
toy1[a] <- toy2

toy1 has only 1 row while toy2 has two. So I added an extra 0 row in toy1.

CodePudding user response:

Because there is a cbind.data.frame method, you could cbind the portion of toy1 that has non-matching column names to all of toy2. R does recycling of needed rows in this situation. Admittedly the column order might not be the same. It could be restored to the original ordering if needed.

toy1.2 <-cbind(toy1[ ! names(toy1) %in% names(toy2) ], toy2 )
toy1.2
#---------------------------

  reason_Capital_giro reason_Compra_estoque reason_Cons_div reason_Expansao reason_Outros reason_working_capital
1                   0                     0               0               0             0                      0
2                   0                     0               0               0             0                      0
  serasa_0 serasa_1 serasa_1.5 serasa_2 serasa_2.6 serasa_3 serasa_3.1 serasa_3.2 serasa_3.3 serasa_3.4 serasa_3.6
1        0        0          0        0          0        0          0          0          0          0          0
2        0        0          0        0          0        0          0          0          0          0          0
#snipped a bunch of rows, leaving the new data from toy2

    revenue       risk target_amount company_years approved_commitee score reason_Compra_equip serasa_1.8
1 4397487.3 12137650.1        150000            18               YES   134                   1          1
2  198019.8   469506.2        100000             9               YES   128                   1          1
  pontualidade_0.25 qualidade_divida_1 bancabilidade_0.2 alavancagem_1.6 porte_4.6 receita_recorrencias_3
1                 1                  1                 1               1         1                      1
2                 1                  1                 1               1         1                      1
  respaldo_patrimonio_0.5 reputacional_5 impacto_covid_3 business_sector_Comercio state_GO
1                       1              1               1                        1        1
2                       1              1               1                        1        1
  • Related