Home > Mobile >  Aggregate a dataframe in R and take column wise proportion
Aggregate a dataframe in R and take column wise proportion

Time:12-24

I have a dataframe like this:

Year Net Cost Gross
2010 5637 6749 6849
2011 5738 2810 5749
2012 4829 5738 5783
2013 9587 6749 5739
2014 4638 6739 6748

I want column wise percerntages for each year:

Year Net Cost Gross
2010 XX% XX% XX%
2011 XX% XX% XX%
2012 XX% XX% XX%
2013 XX% XX% XX%
2014 XX% XX% XX%

These percentages are column wise percentages. I coded as this:

percent = prop.table(as.matrix(test[2:4]), margin=2)

But I do not get the Year column. Please help!

CodePudding user response:

We could use mutate with across

library(dplyr)
test %>%
     mutate(round(100 *across(2:4, proportions), 2))

-output

  Year   Net  Cost Gross
1 2010 18.53 23.45 22.19
2 2011 18.86  9.76 18.62
3 2012 15.87 19.93 18.73
4 2013 31.51 23.45 18.59
5 2014 15.24 23.41 21.86

With the OP's code, we could cbind with the first column

cbind(test[1], prop.table(as.matrix(test[2:4]), margin=2))

data

test <- structure(list(Year = 2010:2014, Net = c(5637L, 5738L, 4829L, 
9587L, 4638L), Cost = c(6749L, 2810L, 5738L, 6749L, 6739L), Gross = c(6849L, 
5749L, 5783L, 5739L, 6748L)), class = "data.frame", row.names = c(NA, 
-5L))

CodePudding user response:

Solution with bind_cols:

percent <- test[1] %>% bind_cols(as.data.frame(prop.table(as.matrix(test[2:4]), margin=2)))
  • Related