パイプ演算子を使用して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
からmagrittr
(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の答えを参照してください)
dplyr
には、列の名前を変更するいくつかの異なる方法があります。
1つは、rename()
関数を使用することです。この例では、summarise()
で作成された名前は式であるため、バックティックする必要があります。
_group_by(mtcars, cyl) %>%
summarise(mean(disp), mean(hp)) %>%
rename(disp_mean = `mean(disp)`, hp_mean = `mean(hp)`)
# cyl disp_mean hp_mean
# 1 4 105.1364 82.63636
# 2 6 183.3143 122.28571
# 3 8 353.1000 209.21429
_
select()
を使用することもできます。列番号を使用できるため、これは少し簡単です。逆ティックをいじる必要がなくなります。
_group_by(mtcars, cyl) %>%
summarise(mean(disp), mean(hp)) %>%
select(1, disp_mean = 2, hp_mean = 3)
_
しかし、この例の場合、コメントで@thelatemailが言及したことを行うのが最善の方法です。つまり、1つ前の手順に戻り、summarise()
の列に名前を付けることです。
_group_by(mtcars, cyl) %>%
summarise(disp_mean = mean(disp), hp_mean = mean(hp))
_
次のコードのように、dplyrで.funs
のsummarise_at
引数を使用することにより、要約された変数にサフィックスを追加できます。
library(dplyr)
# summarise_at with dplyr
mtcars %>%
group_by(cyl) %>%
summarise_at(
.cols = c("disp", "hp"),
.funs = c(mean="mean")
)
# A tibble: 3 × 3
# cyl disp_mean hp_mean
# <dbl> <dbl> <dbl>
# 1 4 105.1364 82.63636
# 2 6 183.3143 122.28571
# 3 8 353.1000 209.21429
また、いくつかの方法で列名を設定できます。
# set_names with magrittr
mtcars %>%
group_by(cyl) %>%
summarise(mean(disp), mean(hp)) %>%
magrittr::set_names(c("cyl", "disp_mean", "hp_mean"))
# set_names with purrr
mtcars %>%
group_by(cyl) %>%
summarise(mean(disp), mean(hp)) %>%
purrr::set_names(c("cyl", "disp_mean", "hp_mean"))
# setNames with stats
mtcars %>%
group_by(cyl) %>%
summarise(mean(disp), mean(hp)) %>%
stats::setNames(c("cyl", "disp_mean", "hp_mean"))
# A tibble: 3 × 3
# cyl disp_mean hp_mean
# <dbl> <dbl> <dbl>
# 1 4 105.1364 82.63636
# 2 6 183.3143 122.28571
# 3 8 353.1000 209.21429