I have a lot of data that is represented as below. in total there are 13 dafaframes as the one represented below. All have the same columns.
There are in total about 500.000 rows and 106 columns in each dataframe. I want to combine them in the following way:
If the first AND second column in a row in df1 are equal to the first and second column in a row i df2 i want to add the two rows together, otherwise i want to add the row to the dataframe.
i Have created the following code for a minimal example (which gives me the wanted result, but really will not work for the scale that im a working at):
dput(df1[,1:5 ])
structure(list(C5id = c("100110", "100110", "100110", "100110",
"100100", "100100", "100100", "100100", "100100", "100100"),
Retnavn = c("Braiserede kæber af gris, tomat-skysovs, kartofler, ovnbagte bønner med bacon",
"Braiseret okseinderlår, skysovs, kartofler, marinerede rødløg med hyldeblomst",
"Cremet champignonsuppe", "Forårsfrikassé med kalv, asparges og forårsløg, kartofler, broccoli",
"Hakkebøf, bearnaisesauce, kartofler, ærter", "Farsbrød med gulerødder og ærter, legeret sovs, kartofler og romanescokål",
"Fiskefrikadeller med persillesovs, kartofler og juliennegrønt",
"Fiskefrikadeller med remouladesovs, kartofler og juliennegrønt",
"Forloren hare med vildtsovs, kartofler og tyttebærsylt",
"Frikadeller med skysovs, kartofler og sellerichutney"),
a2018uge2 = c(2, 2, 2, 2, 2, 2, 2, 2, 2, 2), a2018uge3 = c("2",
"2", "2", "2", "2", "2", "2", "2", "2", "2"), a2018uge4 = c("2",
"2", "2", "2", "2", "2", "2", "2", "2", "2")), class = "data.frame", row.names = 4:13)
> dput(df2[,1:5 ])
structure(list(C5id = c("100110", "100110", "100100", "100100",
"100100", "100100", "100100", "100100", "100100", "100100", "100110",
"100110", "100100", "100100", "100100", "100100", "100100"),
Retnavn = c("Braiserede kæber af gris, tomat-skysovs, kartofler, ovnbagte bønner med bacon",
"Braiseret okseinderlår, skysovs, kartofler, marinerede rødløg med hyldeblomst",
"Cremet champignonsuppe", "Forårsfrikassé med kalv, asparges og forårsløg, kartofler, broccoli",
"Hakkebøf, bearnaisesauce, kartofler, ærter", "Hamburgerryg, flødekartofler, blomkål, broccoli og romanesco",
"Kylling i karrysovs med æbler og ingefær, kartofler, cherrytomater med løg",
"Kylling i sur-sød sovs med peberfugt, kartofler og broccoli",
"Kyllingefrikassé med kartofler", "Lammesteg, flødekartofler, ovnbagte grønne bønner med bacon",
"Cremet champignonsuppe", "Forårsfrikassé med kalv, asparges og forårsløg, kartofler, broccoli",
"Farsbrød med gulerødder og ærter, legeret sovs, kartofler og romanescokål",
"Fiskefrikadeller med persillesovs, kartofler og juliennegrønt",
"Fiskefrikadeller med remouladesovs, kartofler og juliennegrønt",
"Forloren hare med vildtsovs, kartofler og tyttebærsylt",
"Frikadeller med skysovs, kartofler og sellerichutney"),
a2018uge2 = c(3, 3, 1, 1, 3, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
2, 2), a2018uge3 = c("3", "3", "1", "1", "3", "1", "1", "1",
"1", "1", "2", "2", "2", "2", "2", "2", "2"), a2018uge4 = c("3",
"3", "1", "1", "3", "1", "1", "1", "1", "1", "2", "2", "2",
"2", "2", "2", "2")), class = "data.frame", row.names = c("5",
"6", "7", "8", "9", "10", "11", "12", "13", "14", "61", "71",
"91", "101", "111", "121", "131"))
df2_before = df2
hej=c()
for (i in 1:length(df2$C5id)) {
for (j in 1:length(df1$C5id)) {
if (df2$C5id[i] == df1$C5id[j] && df2$Retnavn[i] == df1$Retnavn[j]) {
df2[j, 3:8 ] <- as.numeric(df2[i,3:8 ]) + as.numeric(df1[j,3:8 ])
hej=c(hej,j)
#df1 = df1[-i, ]
}
}
cat("vi er kommet til:",i,",",j,"\n")
}
df2=rbind(df2,df1[-hej,])
where df1 and df2 are the two dataframes. My problem is that this has to loop through 500.000*500.000 different combination. I have in total 13 dataframes of this size that have to combined, so i would take an absolute eternity.
I was hoping that there would be some sort of vectoriced way to this that might be done before the fall of 2030.
Best regard
ps. I understand that the way i inserted the data in this post might not be the best. But this might be the best i could think of
pps. I have edited the question in regard to MKR comment.