0

I have below-mentioned dataframe in R:

country    product          profit_perc
USA        100              15.2%
Canada     10               10.25%
Russia     50               19.72%
Japan      30               25.23%

Required dataframe:

country    product          profit_perc
USA        100              15.2%
Canada     10               10.25%
Russia     50               19.72%
Japan      30               25.23%
Total      190              70.4%
user9211845
  • 131
  • 1
  • 12

1 Answers1

1
library(data.table)
d <- read.table(text = "
country    product          profit_perc
USA        100              15.2
Canada     10               10.25
Russia     50               19.72
Japan      30               25.23", header=T
)

d <- setDT(d)
vars <- c("product", "profit_perc")

d <- rbindlist(list(
  d,
  d[,  lapply(.SD, sum), .SDcols=vars ][,country := "Tot"]
), use.names = T)

   country product profit_perc
1:     USA     100       15.20
2:  Canada      10       10.25
3:  Russia      50       19.72
4:   Japan      30       25.23
5:     Tot     190       70.40

You can also pass the index of the columns directly:

d <- rbindlist(list(
  d,
  d[,  lapply(.SD, sum), .SDcols=c(2:3) ][,country := "Tot"]
), use.names = T)
desval
  • 2,345
  • 2
  • 16
  • 23