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

如何在dplyr::summarise中使用paste生成字符型列名?

在dplyr::summarise中动态生成字符型列名的方法

当然可以实现类似你第三种示例的写法,核心是用dplyr的动态赋值运算符:=,搭配解引用符号!!来处理生成的列名字符串。

你的第三种写法行不通,是因为summarise的左侧默认是语法层面的列名定义,不能直接放置函数调用结果,需要通过动态语法将字符串转为有效的列名标识。

具体实现方式

方法1:直接用paste0生成列名并解引用

i <- "name"

iris %>%
  filter(Species == "setosa") %>%
  summarise(!!paste0("Sum_", i) := sum(Sepal.Length))

这里!!paste0("Sum_", i)会先执行paste0生成字符串"Sum_name",再通过!!将其解引用为有效的列名,最后用:=完成赋值。

方法2:结合glue语法更直观

如果需要更清晰的字符串拼接(比如复杂变量组合),可以用glue包的语法:

library(glue)

i <- "name"

iris %>%
  filter(Species == "setosa") %>%
  summarise(!!glue("Sum_{i}") := sum(Sepal.Length))

这种写法更贴近自然语言的拼接逻辑,可读性更强。

扩展:批量生成动态列名

如果需要批量生成动态命名的汇总列,还可以结合across的.names参数(dplyr 1.0.0+版本支持):

cols_to_sum <- c("Sepal.Length", "Sepal.Width")
suffix <- "setosa_sum"

iris %>%
  filter(Species == "setosa") %>%
  summarise(across(all_of(cols_to_sum), 
                   ~sum(.x), 
                   .names = "{.col}_{suffix}"))

这里.names直接支持glue风格的动态命名,无需额外的!!和:=,写法更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:42:40