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

使用dplyr的summarise_at()报错:.funs参数格式问题求解

解决dplyr中summarise_at()的报错问题

报错信息

Error in summarise_at():
! .funs must be a one sided formula, a function, or a function name.

可复现数据集

ex <- data.frame(treatment = c(1,2,3,1,2,3,1,2,3), percent = c(55,44,33,22,11,55,44,33,22))

触发错误的代码

# 将treatment转换为因子类型
ex$treatment <- as.factor(ex$treatment)

ex %>% 
  group_by(treatment) %>% 
  summarise_at(vars(percent), list(name=mean))

修正方案

1. 推荐:使用dplyr 1.0.0+的现代语法(summarise() + across())

summarise_at()属于旧版语法,dplyr 1.0.0之后官方推荐使用across()配合summarise(),写法更直观,且能直接保留原列名:

ex$treatment <- as.factor(ex$treatment)

ex %>% 
  group_by(treatment) %>% 
  summarise(across(percent, mean))

2. 适配旧版summarise_at()语法

如果坚持使用summarise_at(),需要调整.funs的传入格式,用单侧公式或直接传递函数名,同时可以指定列名:

ex$treatment <- as.factor(ex$treatment)

# 写法1:直接传函数名,自动生成原列名+_mean的列
ex %>% 
  group_by(treatment) %>% 
  summarise_at(vars(percent), mean)

# 写法2:用命名单侧公式,自定义列名为原列名
ex %>% 
  group_by(treatment) %>% 
  summarise_at(vars(percent), list(percent = ~mean(.)))

3. 最简写法:直接在summarise()中计算

不需要任何后缀函数,直接指定计算逻辑,结果列名直接设置为原列名:

ex$treatment <- as.factor(ex$treatment)

ex %>% 
  group_by(treatment) %>% 
  summarise(percent = mean(percent))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:57:22