[英]In R How Do I Name a Dataframe Column After a Variable?
As a part of a function I'm trying to create a dataframe and I want to name one of the columns after a variable.作为 function 的一部分,我正在尝试创建 dataframe 并且我想在变量之后命名其中一列。 The below is some dummy data and is the part that I'm stuck on.
下面是一些虚拟数据,是我坚持的部分。
library(tidyverse)
graph <- data.frame(brand = rep(c("A","B","C"), each = 3),
week_commencing = rep(as.Date(c('2020-03-01', '2020-04-01', '2020-05-01')), times = 3),
sessions = sample(1000:2000,9),
conv_rate = runif(9,0,1))
website = "A"
metric = "sessions"
graph %>%
filter(brand == (!!website)) %>%
group_by(brand) %>%
summarise(metric = max(get(metric)),
week_commencing = min(week_commencing),
lab = "This Year")
In the summarise function call I want the column name metric to be called sessions, I've tried using get(metric) and (.!metric) as part of the naming of the column but it doesn't work.在汇总 function 调用中,我希望将列名度量称为会话,我尝试使用 get(metric) 和 (.!metric) 作为列命名的一部分,但它不起作用。
Is this even possible to do in R?这甚至可以在 R 中做到吗? Any help would be appreciated.
任何帮助,将不胜感激。
Do you mean something like this?你的意思是这样的吗?
library(tidyverse)
graph <- data.frame(brand = rep(c("A","B","C"), each = 3),
week_commencing = rep(as.Date(c('2020-03-01', '2020-04-01', '2020-05-01')), times = 3),
sessions = sample(1000:2000,9),
conv_rate = runif(9,0,1))
website = "A"
metric = "sessions"
graph %>%
filter(brand == (!!website)) %>%
group_by(brand) %>%
summarise(metric = max(get(metric)),
week_commencing = min(week_commencing),
lab = "This Year") %>% rename(sessions=metric)
# A tibble: 1 x 4
brand sessions week_commencing lab
<fct> <int> <date> <chr>
1 A 1819 2020-03-01 This Year
If you wish to use a variable as a name on the left hand side of a dplyr
function, (without having to separately rename the column), you can use :!variable :=
instead of variable =
, so in your case it would be:如果您希望使用变量作为
dplyr
function 左侧的名称(无需单独重命名列),您可以使用:!variable :=
而不是variable =
,因此在您的情况下:
graph %>%
filter(brand == (!!website)) %>%
group_by(brand) %>%
summarise(!!metric := max(get(metric)),
week_commencing = min(week_commencing),
lab = "This Year")
#> # A tibble: 1 x 4
#> brand sessions week_commencing lab
#> <chr> <int> <date> <chr>
#> 1 A 1901 2020-03-01 This Year
We can also do this with我们也可以这样做
library(dplyr)
graph %>%
filter(brand == website) %>%
group_by(brand) %>%
summarise(metric = max(!! rlang::sym(metric)),
week_commencing = min(week_commencing),
lab = "This Year") %>% rename_at(vars(metric), ~ 'sessions')
# A tibble: 1 x 4
brand sessions week_commencing lab
<chr> <int> <date> <chr>
1 A 1555 2020-03-01 This Year
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.