如何使用管道操作符将管道插入替换函数(如colnames()<-)?

以下是我想做的:

library(dplyr)
averages_df <- 
   group_by(mtcars, cyl) %>%
   summarise(mean(disp), mean(hp))
colnames(averages_df) <- c("cyl", "disp_mean", "hp_mean")
averages_df

# Source: local data frame [3 x 3]
# 
#   cyl disp_mean   hp_mean
# 1   4  105.1364  82.63636
# 2   6  183.3143 122.28571
# 3   8  353.1000 209.21429

但理想的情况是:

averages_df <- 
  group_by(mtcars, cyl) %>%
  summarise(mean(disp), mean(hp)) %>%
  add_colnames(c("cyl", "disp_mean", "hp_mean"))

有没有一种方法可以做到这一点,而不必每次都编写一个特殊的函数?

这里的答案只是一个开始,但并不完全是我的问题:Chaining arithmetic operators in dplyr

推荐答案

你可以使用colnames<-setNames(感谢@David Arenburg)

group_by(mtcars, cyl) %>%
  summarise(mean(disp), mean(hp)) %>%
  `colnames<-`(c("cyl", "disp_mean", "hp_mean"))
  # or
  # `names<-`(c("cyl", "disp_mean", "hp_mean"))
  # setNames(., c("cyl", "disp_mean", "hp_mean")) 

#   cyl disp_mean   hp_mean
# 1   4  105.1364  82.63636
# 2   6  183.3143 122.28571
# 3   8  353.1000 209.21429

或者从magrittr中 Select Alias(set_colnames):

library(magrittr)
group_by(mtcars, cyl) %>%
  summarise(mean(disp), mean(hp)) %>%
  set_colnames(c("cyl", "disp_mean", "hp_mean"))

如果你只是(重新)命名许多列中的一些列,那么dplyr::rename可能会更方便(它需要写新旧名称;请参阅@Richard Scriven的答案)

R相关问答推荐

如何从使用lapply()的r中的拆分数据帧中删除多个部分?

如何生成包含可能条目列表而不是计数的表?

从具有随机模式的字符串中提取值

使用Shiny组合和显示复制和粘贴的数据

如何在ggplot 2线性图的每个方面显示每个组的误差条?

如何使用R Shiny中的条件面板仅隐藏和显示用户输入,同时仍允许运行基础计算?

在R中创建一个包含转换和转换之间的时间的列

隐藏e_mark_line的工具提示

将向量组合到一个数据集中,并相应地命名行

如何从R ggplot图片中获取SVG字符串?

以更少间隔的较小表中的聚合离散频率表

Ggplot2中geom_tile的动态zoom

调换行/列并将第一行(原始数据帧的第一列)提升为标题的Tidyr类似功能?

R如何将列名转换为更好的年和月格式

警告消息";没有非缺失的参数到min;,正在返回数据中的inf";.表分组集

为什么这个表格格罗布不打印?

为什么函数toTitleCase不能处理english(1),而toupper可以?

自定义交互作用图的标签

如何判断代码是否在R Markdown(RMD)上下文中交互运行?

如何在shiny 的应用程序 map 视图宣传单中可视化单点