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

如何用dplyr为含非数值首列的交叉表添加行与列合计?

实现带行列合计的交叉表

你可以通过在原代码后追加列合计行的方式完成需求,核心是用summarise(across())计算各数值列的合计,再用bind_rows将合计行添加到原表格中:

library(tidyverse)

mtcars %>%
  as.tibble() %>%                                      # 转为tibble格式
  mutate(cyl = factor(cyl), gear = factor(gear)) %>%    # 将cyl和gear转为因子
  select(cyl, gear, mpg) %>%                            # 选取演示数据列
  group_by(cyl, gear) %>%                               # 按cyl和gear分组
  tally() %>%                                           # 计算每组数量
  spread(cyl, n) %>%                                    # 转换为交叉表
  mutate(RowCount = rowSums(.[ ,-1], na.rm = TRUE)) %>% # 计算行合计
  # 新增:计算列合计并追加为新行
  bind_rows(
    summarise(.,
              gear = NA,
              across(c(`4`, `6`, `8`, RowCount), ~sum(., na.rm = TRUE))
    )
  )

运行结果:

# A tibble: 4 × 5
  gear    `4`   `6`   `8` RowCount
  <fct> <int> <int> <int>    <dbl>
1 3         1     2    12       15
2 4         8     4    NA       12
3 5         2     1     2        5
4 NA       11     7    14       32

关键说明:

  • across(c(4, 6, 8, RowCount), ~sum(., na.rm = TRUE)):批量指定需要计算合计的列,通过sum(., na.rm = TRUE)忽略缺失值计算每列的总和
  • bind_rows():将单独计算出的合计行追加到原tibble的末尾
  • 合计行的gear列设为NA,满足你的格式需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:02:50