You can use nested byto achieve something like this:
df2 = by(df, :region) do sub1
t = DataFrame(product=NA, year=NA, prod=sum(sub1[:prod]), cons=sum(sub1[:cons]))
sub1mod = by(sub1, [:region,:product]) do sub2
t2 = DataFrame(year=NA, prod=sum(sub2[:prod]), cons=sum(sub2[:cons]))
t3 = vcat(t2,sub2)
end
t2 = vcat(t,sub1mod)
end
delete!(df2,[:region_1,:region_2,:product_1])
Of:
14Γ5 DataFrames.DataFrame
β Row β region β product β year β prod β cons β
βββββββΌβββββββββΌβββββββββββΌβββββββΌβββββββΌβββββββ€
β 1 β "EU" β NA β NA β 48 β 52 β
β 2 β "EU" β "apples" β NA β 20 β 22 β
β 3 β "EU" β "apples" β 2010 β 9 β 10 β
β 4 β "EU" β "apples" β 2011 β 11 β 12 β
β 5 β "EU" β "banana" β NA β 28 β 30 β
β 6 β "EU" β "banana" β 2010 β 13 β 14 β
β 7 β "EU" β "banana" β 2011 β 15 β 16 β
β 8 β "US" β NA β NA β 16 β 20 β
β 9 β "US" β "apples" β NA β 4 β 6 β
β 10 β "US" β "apples" β 2010 β 1 β 2 β
β 11 β "US" β "apples" β 2011 β 3 β 4 β
β 12 β "US" β "banana" β NA β 12 β 14 β
β 13 β "US" β "banana" β 2010 β 5 β 6 β
β 14 β "US" β "banana" β 2011 β 7 β 8 β
source
share