1
votes

Dans R Comment nommer une colonne Dataframe après une variable?

Dans le cadre d'une fonction, j'essaie de créer un dataframe et je veux nommer l'une des colonnes après une variable. Voici quelques données factices et c'est la partie sur laquelle je suis bloqué.

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") 

Dans l'appel de la fonction de résumé, je veux que la métrique du nom de la colonne soit appelée sessions, j'ai essayé d'utiliser get (métrique) et (!! métrique) dans le cadre de la dénomination de la colonne mais cela ne fonctionne pas.

Est-ce même possible de le faire en R? Toute aide serait appréciée.


2 commentaires

Même à l'intérieur d'une fonction, je ne pense pas que vous ayez besoin de tidyeval pour le filtre. Vous pouvez simplement faire: filtre (marque == site Web)


cette question a des réponses qui montrent comment changer le (s) nom (s) de colonne dans dataframe dans la base R qui peuvent utiliser des variables stackoverflow.com/q/6081439 / 59470


3 Réponses :


0
votes

Voulez-vous dire quelque chose comme ça?

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


0 commentaires

0
votes

Si vous souhaitez utiliser une variable comme nom sur le côté gauche d'une fonction dplyr , (sans avoir à renommer séparément la colonne), vous pouvez utiliser la variable !!: = au lieu de variable = , donc dans votre cas ce serait:

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


1 commentaires

Cela fonctionne parfaitement, c'est exactement ce que je cherchais! Merci beaucoup



0
votes

Nous pouvons également le faire avec

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


0 commentaires