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

如何在不传递前置参数的情况下为adorn_totals指定求和列?

如何简洁使用janitor::adorn_totals仅对指定列计算总计?

我在使用dplyr和janitor处理mtcars数据时,执行以下代码:

library(dplyr)
library(janitor)

mtcars %>%
  count(vs, am) %>%
  adorn_totals()

得到的输出是:

vs am  n
      0  0 12
      0  1  6
      1  0  7
      1  1  7
  Total  2 32

我只希望对n列计算总计,不希望计算am列的总计。我知道可以通过adorn_totals(,,,, n)实现,但这种需要写多个前置空参数的写法不够简洁。尝试使用adorn_totals(... = n)时出现报错:

mtcars %>%
  count(vs, am) %>%
  adorn_totals(... = n)

报错信息:

Error in `adorn_totals()`:
! Names can't be of the form `...` or `..j`.
✖ These names are invalid:
  * "..." at location 1.
Backtrace:
     ▆
  1. ├─mtcars %>% count(vs, am) %>% adorn_totals(... = n)
  2. └─janitor::adorn_totals(., ... = n)
  3.   └─tidyselect::eval_select(expr, data = dat)
  4.     └─tidyselect:::eval_select_impl(...)
  5.       ├─tidyselect:::with_subscript_errors(...)
  6.       │ └─rlang::try_fetch(...)
  7.       │   └─base::withCallingHandlers(...)
  8.       └─tidyselect:::vars_select_eval(...)
  9.         └─tidyselect:::ensure_named(...)
 10.           └─vctrs::vec_as_names(names(pos), repair = "check_unique", call = call)
 11.             └─vctrs (local) `<fn>`()
 12.               └─vctrs:::validate_unique(names = names, arg = arg, call = call)
 13.                 └─vctrs:::stop_names_cannot_be_dot_dot(names, call = call)
 14.                   └─vctrs:::stop_names(...)
 15.                     └─vctrs:::stop_vctrs(...)
 16.                       └─rlang::abort(message, class = c(class, "vctrs_error"), ..., call = vctrs_error_call(call))

请问有没有更直接的方法实现仅指定n列计算总计,无需传递前置空参数?


解决方案

可以通过明确指定前置参数的名称来避免写多个占位逗号,比如指定name参数(保持默认值"Total"),然后直接传入目标列名n,这样就无需用逗号跳过前面的参数:

library(dplyr)
library(janitor)

mtcars %>%
  count(vs, am) %>%
  adorn_totals(name = "Total", n)

输出结果:

vs am  n
      0  0 12
      0  1  6
      1  0  7
      1  1  7
  Total - 32

这种写法既简洁,又能仅对n列计算总计,am列的总计行会使用默认填充值-显示,符合需求。

如果需要更灵活的列选择(比如动态指定列名),可以结合tidyselect的选择器语法:

mtcars %>%
  count(vs, am) %>%
  adorn_totals(name = "Total", tidyselect::all_of("n"))

效果和直接传入n完全一致,适合列名需要动态生成的场景。


内容的提问来源于stack exchange,提问作者M Aurélio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:53:10