将行添加到计算所有数字列总和的数据框

add row to a data frame that calculates sums of all numeric columns

我有一个包含前两列字符的数据框,其余为双列。 我想在底部添加一行,在前两列中有单词 'Total' 并计算其余列值的总和。

例如让我们使用:

segment<- c('seg1', 'seg1', 'seg2', 'seg2', 'seg3', 'seg3')
subSegment<- c('subseg1', 'subseg2', 'subseg1', 'subseg2', 'subseg1', 'subseg2')
var.1<- c(100, 20, 30, 50, 40, 40)
var.2<- c(200, 30, 30, 70, 30, 140)
var.3<- c(50, 50, 40, 20, 30, 40)
var.4<- c(60, 50, 35, 53, 42, 20)
df<- data.frame(segment, subSegment, var.1, var.2, var.3, var.4)

我是这样做的:

df%>% # now need to add a row with totals
    add_row( segment="Total",subSegment="Total", var.1 = sum(.$var.1), var.2= sum(.$var.2), var.3 = sum(.$var.3), var.4 = sum(.$var.4))

显然,名称和值只是示例,但在我的实际问题中,我有超过 8 个变量,这样做是浪费时间。 我正在寻找一个更通用的解决方案,它只对 add_row 说前两列“总计”,然后对第三列之后的所有列说 ....=sum(.$....)

也许使用 sapply(df[c(3:ncol(df))].

之类的东西

管理员包已准备就绪:


library(janitor)

df %>%
  adorn_totals("row", fill = "Total")

 segment subSegment var.1 var.2 var.3 var.4
    seg1    subseg1   100   200    50    60
    seg1    subseg2    20    30    50    50
    seg2    subseg1    30    30    40    35
    seg2    subseg2    50    70    20    53
    seg3    subseg1    40    30    30    42
    seg3    subseg2    40   140    40    20
   Total      Total   280   500   230   260

让我们添加一个额外的行,TotalTotal 在两列中,让我们计算从第 3 列开始到结束 ncol(df)colSums 列的总和].

df<- rbind(df, c("Total", "Total", colSums(df[,3:ncol(df)], na.rm = TRUE)))