1. ホーム
  2. r

[解決済み] colnames()<- などの置換関数では、パイプ演算子 %>% を使用します。

2023-04-25 14:28:24

質問

パイプ演算子を使って、次のような置換関数にパイプを通すにはどうしたらよいでしょうか。 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"))

毎回専門の関数を書かずに済む方法はないでしょうか?

ここの回答は手始めですが、私の質問とはちょっと違います。 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

あるいは Alias ( set_colnames ) から magrittr :

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

dplyr::rename の方が便利かもしれません(古い名前と新しい名前の両方を書く必要があります;@Richard Scrivenの回答を参照)。