如何在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
相关产品推荐
相关产品推荐

