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

R tidyverse技术问题:如何为统计表格添加列汇总行

解决方案

修复后的函数代码

library(tidyverse)

count_demo <- function(data, filter_expr) {
  # 生成带行汇总的交叉计数宽表
  result <- data %>%
    filter({{ filter_expr }}) %>%
    count(gender, race, name = "count") %>%
    pivot_wider(names_from = race, values_from = count, values_fill = 0) %>%
    mutate(Total = rowSums(pick(-gender)))
  
  # 计算列汇总并构造总行
  total_row <- result %>%
    summarise(
      gender = "Total",
      across(everything(), ~sum(.x))
    )
  
  # 合并原表与汇总行
  bind_rows(result, total_row)
}

示例使用

# 构造测试数据
sample_data <- tibble(
  gender = rep(c("Male", "Female"), each = 5),
  race = sample(c("White", "Black", "Asian"), 10, replace = TRUE)
)

# 无筛选调用
count_demo(sample_data, TRUE)

# 带筛选条件调用
count_demo(sample_data, gender == "Male")

错误原因说明

你之前在add_row中使用pick()触发报错,核心原因是pick()必须在数据掩码上下文(如mutate()、summarise()这类能识别数据框列的函数)中运行,而add_row()是直接构造行数据,不属于该环境,无法解析pick()引用的列。

改用summarise()计算列总和,是在数据框的原生上下文里操作,能正确遍历所有列,再通过bind_rows()合并,即可避免该问题。

示例输出

# A tibble: 3 × 5
  gender White Black Asian Total
  <chr>  <int> <int> <int> <dbl>
1 Male       2     1     1     4
2 Female     1     2     1     4
3 Total      3     3     2     8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:42:37