首页 > 解决方案 > 如何在 R 数据框中的最后一行添加总列,其值为 %

问题描述

我在 R 中有以下提到的数据框:

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

所需数据框:

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

标签: rdataframedplyrtidyverse

解决方案


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

您也可以直接传递列的索引:

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

推荐阅读