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

如何在dplyr的summarise_if函数中自定义列名分隔符以遵循R谷歌风格

解决方法:将统计结果列名从下划线改为点分隔

好问题!要把summarise_if生成的下划线分隔列名改成Google R风格指南推荐的点分隔形式,这里有两种实用的方法,适配不同的dplyr版本和使用习惯:

方法1:用across直接生成点分隔列名(推荐,适配新版dplyr)

dplyr的新版本已经推荐用across替代summarise_if这类"scoped verbs",我们可以直接在across里通过.names参数指定命名规则,一步到位生成符合要求的列名:

# 加载dplyr(需要1.0.0及以上版本)
library(dplyr)

wthmon %<>%
  summarise(
    across(
      where(is.numeric),  # 筛选数值列
      list(min = min, max = max, mean = mean, median = median),  # 指定统计函数
      na.rm = TRUE,  # 忽略缺失值
      .names = "{.col}.{.fn}"  # 命名规则:原列名.统计函数名
    )
  )

这样运行后,生成的列名就会是temp.min、soil.moist.min这种点分隔的形式,完全符合Google R风格指南的要求。

方法2:先统计再批量替换列名(兼容旧版dplyr)

如果你还在使用旧版dplyr,或者想保留原summarise_if的写法,可以先执行统计,再用rename_with批量把下划线替换成点:

library(dplyr)

wthmon %<>%
  summarise_if(is.numeric, funs(min, max, mean, median), na.rm = TRUE) %>%
  rename_with(~ gsub("_", ".", .x))  # 将所有下划线替换为点

这里gsub("_", ".", .x)会把列名里的每一个下划线都替换成点,快速完成格式转换。

两种方法都能达到你的需求,优先推荐方法1,因为它更符合dplyr的现代语法规范,也更直观可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:10:06