Wie kann ich den Pipe Operator verwenden, um in die Ersatzfunktion zu leiten colnames()<-
?
Folgendes versuche ich zu tun:
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
Aber im Idealfall wäre es so etwas wie:
averages_df <-
group_by(mtcars, cyl) %>%
summarise(mean(disp), mean(hp)) %>%
add_colnames(c("cyl", "disp_mean", "hp_mean"))
Gibt es eine Möglichkeit, dies zu tun, ohne jedes Mal eine Spezialfunktion zu schreiben?
Die Antworten hier sind ein Anfang, aber nicht genau meine Frage: Verketten von arithmetischen Operatoren in dplyr
summarise
-group_by(mtcars, cyl) %>% summarise(disp_mean=mean(disp), hp_mean=mean(hp))
obwohl ich nicht sehe, wie stark die Verwendungcolnames
ist. Muss jede Kleinigkeit in dplyr erledigt werden?rename()
Funktion indplyr
. Oder ja, mach was @thelatemail gesagt hat.setNames
wie ingroup_by(mtcars, cyl) %>% summarise(mean(disp), mean(hp)) %>% setNames(., c("cyl", "disp_mean", "hp_mean"))
"names<-"(., ...
und dann sagte ich mir "Antworten:
Sie könnten
colnames<-
odersetNames
(dank @David Arenburg) verwendengroup_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
Oder wählen Sie ein
Alias
(set_colnames
) ausmagrittr
:library(magrittr) group_by(mtcars, cyl) %>% summarise(mean(disp), mean(hp)) %>% set_colnames(c("cyl", "disp_mean", "hp_mean"))
dplyr::rename
Dies ist möglicherweise praktischer, wenn Sie nur einige von vielen Spalten (neu) benennen (es ist erforderlich, sowohl den alten als auch den neuen Namen zu schreiben; siehe die Antwort von @Richard Scriven).quelle
`foo<-`()
Syntax für solche "Ersatz" -Funktionen funktioniert.Es
dplyr
gibt verschiedene Möglichkeiten, die Spalten umzubenennen.Eine ist, die
rename()
Funktion zu verwenden. In diesem Beispiel müssen Sie die von erstellten Namen zurückkreuzensummarise()
, da es sich um Ausdrücke handelt.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
Sie könnten auch verwenden
select()
. Dies ist etwas einfacher, da wir die Spaltennummer verwenden können, sodass Sie nicht mehr mit Back-Ticks herumspielen müssen.group_by(mtcars, cyl) %>% summarise(mean(disp), mean(hp)) %>% select(1, disp_mean = 2, hp_mean = 3)
In diesem Beispiel wäre es jedoch am besten, das zu tun, was @thelatemail in den Kommentaren erwähnt hat, und einen Schritt zurück zu gehen und die Spalten in zu benennen
summarise()
.quelle
Wir können den zusammengefassten Variablen ein Suffix hinzufügen, indem wir das
.funs
Argument vonsummarise_at
mit dplyr als folgenden Code verwenden.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
Wir können Spaltennamen auch auf verschiedene Arten festlegen.
# 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
quelle