library(tidyverse)
help(diamonds)

diamanti <- diamonds
diamanti |> 
  group_by(clarity) |> 
  summarise(price_avg = mean(price))

diamanti |> 
  ggplot() +
    aes(x = carat, y = price) +
    geom_point() +
    facet_wrap(facets = vars(clarity))


calcola_tabella <- function(tb_dati, var_gruppo, var_numerica){
  
  var_gruppo <- ensym(var_gruppo)
  var_numerica <- ensym(var_numerica)
  
  tb_dati |> 
    group_by({{var_gruppo}}) |> 
    summarise("{{var_numerica}}_avg" := mean({{var_numerica}}))
  
}

calcola_tabella(diamanti, "clarity", "price")
calcola_tabella(diamanti, "clarity", "x")
calcola_tabella(diamanti, "cut", "price")
calcola_tabella(diamanti, "color", "depth")


calcola_tabella(iris, "Species", "Petal.Width")
calcola_tabella(iris, Species, Petal.Width)

calcola_tabella_fun <- function(tb_dati, var_gruppo, var_numerica, fun = mean){
  
  var_gruppo <- ensym(var_gruppo)
  var_numerica <- ensym(var_numerica)
  
  tb_dati |> 
    group_by({{var_gruppo}}) |> 
    summarise("{{var_numerica}}_{{fun}}" := fun({{var_numerica}}))
  
}

calcola_tabella_fun(iris, Species, Petal.Width)
calcola_tabella_fun(iris, Species, Petal.Width, fun = sd)


crea_scatter <- function(tb_dati, var_x, var_y){
  
  var_x <- ensym(var_x)
  var_y <- ensym(var_y)
  
  ggplot(data = tb_dati) +
    aes(x = {{var_x}}, y = {{var_y}}) +
    geom_point() +
    ggthemes::theme_clean()
  
}


crea_scatter(iris, Sepal.Length, Sepal.Width)
crea_scatter(iris, Petal.Length, Petal.Width)
crea_scatter(diamanti, carat, price)


crea_scatter_gruppo <- function(tb_dati, var_x, var_y, var_gruppo){
  
  var_x <- ensym(var_x)
  var_y <- ensym(var_y)
  var_gruppo <- ensym(var_gruppo)
  
  ggplot(data = tb_dati) +
    aes(x = {{var_x}}, y = {{var_y}}) +
    geom_point() +
    facet_wrap(vars({{var_gruppo}})) +
    ggthemes::theme_clean()
  
}

crea_scatter_gruppo(iris, Sepal.Length, Sepal.Width, Species)
crea_scatter_gruppo(iris, Petal.Length, Petal.Width, Species)
crea_scatter_gruppo(diamanti, carat, price, clarity)
