You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用tidyverse函数计算tibble的行与列总计?

嘿,很高兴你已经尝试用gather/spread/join的组合搞定行和列总计啦!作为tidyverse新手,确实有更简洁高效的方法,我给你分享两种常用的方案:

方法1:用janitor包一键搞定(最省心)

janitor是tidyverse生态里专门做数据清洗和格式化的工具包,其中adorn_totals()函数可以直接给你的tibble添加行和列的总计,一步到位,代码超简洁:

先安装并加载janitor(如果还没装的话):

install.packages("janitor")
library(janitor)
library(tidyverse)

# 你的示例数据
df <- tibble(names=c('a','b','c','d','e'),x = 1:5, y =5:1, z=2:6)

# 同时添加行总计和列总计
df %>%
  adorn_totals(where = c("row", "col"))

运行后你会看到:最后一行是所有行的列总计,最后一列是每一行的行总计,连names列的最后一行都会自动显示"Total",完美适配你的需求!

方法2:纯核心tidyverse实现(不用额外装包)

如果不想新增依赖,用dplyr和tidyr的组合也能高效完成,分两步走:

  1. 先给每行添加行总计
  2. 计算所有列的总计,再合并到数据框底部

代码示例:

library(tidyverse)

df <- tibble(names=c('a','b','c','d','e'),x = 1:5, y =5:1, z=2:6)

# 第一步:添加行总计列
df_with_row_totals <- df %>%
  mutate(row_total = rowSums(across(x:z))) 
# 这里用across(x:z)选中所有数值列,rowSums计算每行的总和,比手动列名更灵活

# 第二步:计算列总计并合并
df_with_totals <- df_with_row_totals %>%
  bind_rows(
    summarize(., 
              names = "Total",
              across(x:row_total, sum) # 对所有数值列(包括刚加的row_total)求和
              )
  )

df_with_totals

这种方法用了across()函数来批量处理数值列,不管你有多少个数值列都能轻松搞定,比反复gather/spread要高效得多,尤其是数据量较大的时候。

内容的提问来源于stack exchange,提问作者Mutuelinvestor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 22:33:13