diff --git a/README.md b/README.md index 534749d..bb644d5 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,9 @@ Fora do horário de aula ou monitoria: ## Práticas -| Exemplo | -|:--------| +| Exemplo | +|:------------------------------------------------------------------------------------------------| +| [01-pivotagem-across.R](https://curso-r.github.io/202403-r4ds-2/praticas/01-pivotagem-across.R) | ## Lição de casa diff --git a/praticas/01-pivotagem-across.R b/praticas/01-pivotagem-across.R new file mode 100644 index 0000000..19d57b6 --- /dev/null +++ b/praticas/01-pivotagem-across.R @@ -0,0 +1,281 @@ + + +library(tidyverse) + +da_cao <- tibble::tibble( + Cachorro = c("Bacon", "Dexter", "Zip"), + Semana1 = c(10, 10, 0), + Semana2 = c(4, 4, 0), + Semana3 = c(8, 10, 10), + Semana4 = c(9, 8, 9) +) + +# uso básico +da_cao |> + pivot_longer( + c(Semana1, Semana2, Semana3, Semana4) + ) + +# mudando nome das colunas +da_cao |> + pivot_longer( + c(Semana1, Semana2, Semana3, Semana4), + names_to = "Semana", + values_to = "Nota" + ) + +# usos + avançados +da_cao |> + pivot_longer( + starts_with("Semana"), + names_to = "Semana", + values_to = "Nota" + ) + +da_cao |> + pivot_longer( + -Cachorro, + names_to = "Semana", + values_to = "Nota" + ) + +## parenteses +# readr::parse_number("Semana1") + +da_cao |> + pivot_longer( + -Cachorro, + names_to = "Semana", + values_to = "Nota", + names_transform = parse_number + ) |> + # não faz parte do escopo do curso + ggplot(aes(x = Semana, y = Nota, colour = Cachorro)) + + geom_line() + + +## Julio gosta + de coisas explícitas +da_cao |> + pivot_longer( + -Cachorro, + names_to = "Semana", + values_to = "Nota"#, + #names_transform = parse_number + ) |> + mutate(Semana = parse_number(Semana)) + + +da_cao_longo <- da_cao |> + pivot_longer( + -Cachorro, + names_to = "Semana", + values_to = "Nota" + ) + + +# agora vamos deixar largo + +da_cao_longo |> + pivot_wider( + names_from = Semana, + values_from = Nota + ) + +da_cao_longo |> + pivot_wider( + names_from = Cachorro, + values_from = Nota + ) + +da_cao_longo |> + pivot_wider( + names_from = c(Cachorro, Semana), + values_from = Nota + ) + +da_cao_longo |> + mutate(passou = Nota > 5) |> + pivot_wider( + names_from = Semana, + values_from = c(Nota, passou) + ) + +# uso básico +da_cao |> + pivot_longer( + c(Semana1, Semana2, Semana3, Semana4) + ) |> + pivot_wider() + +# praticando pivotagem +da_cao_longo |> + filter(Cachorro != "Bacon" | Semana != "Semana4") + +da_cao_longo |> + filter(!(Cachorro == "Bacon" & Semana == "Semana4")) + + +da_cao_longo |> + filter(!(Cachorro == "Bacon" & Semana == "Semana4")) |> + mutate(Nota = as.character(Nota)) |> + pivot_wider( + names_from = "Semana", + values_from = "Nota", + values_fill = "doente" + ) + +da_cao_longo |> + filter(!(Cachorro == "Bacon" & Semana == "Semana4")) |> + # transformar coluna nota em texto e depois pivot wider + mutate(Nota = as.character(Nota)) |> + pivot_wider( + names_from = "Semana", + values_from = "Nota", + values_fill = "doente" + ) + + +# across ------------------------------------------------------------------ + +library(dados) + +mtcars +mtcarros + +mtcarros |> + group_by(cilindros) |> + summarise( + # media + media_mpg = mean(milhas_por_galao), + media_cilindrada = mean(cilindrada), + media_cavalos_forca = mean(cavalos_forca), + # mediana + mediana_mpg = median(milhas_por_galao), + mediana_cilindrada = median(cilindrada), + mediana_cavalos_forca = median(cavalos_forca) + ) + +mtcarros |> + group_by(cilindros) |> + summarise( + across( + c(milhas_por_galao, cilindrada, cavalos_forca), + mean, + .names = "media_{.col}" + ) + ) + +mtcarros |> + group_by(cilindros) |> + summarise( + across( + .cols = c(milhas_por_galao, cilindrada, cavalos_forca), + .fns = list("media" = mean, "mediana" = median), + .names = "{.fn}_{.col}" + ) + ) + +# uso mais profissional +funcoes_sumarizacao <- list( + "media" = mean, + "mediana" = median, + "desvio_padrao" = sd, + "min" = min, + "max" = max +) +mtcarros |> + group_by(cilindros) |> + summarise( + across( + .cols = c(milhas_por_galao, cilindrada, cavalos_forca), + .fns = funcoes_sumarizacao + ) + ) + + +pinguins |> + glimpse() + +dividir_por_10 <- function(x) { + x / 10 +} + +dividir_por_10(3.9) + +pinguins |> + mutate( + across( + .cols = c(comprimento_bico, profundidade_bico), + .fns = dividir_por_10 + ) + ) + +pinguins |> + mutate( + across( + .cols = ends_with("bico"), + .fns = dividir_por_10 + ) + ) + +# convertendo valores das colunas +pinguins |> + mutate( + across( + .cols = c(especie, ilha, sexo), + .fns = as.character + ) + ) + +# convertendo valores das colunas +# mais nutella +pinguins |> + mutate( + across( + .cols = where(is.factor), + .fns = as.character + ) + ) + +is.factor(factor("aaa")) + +is.factor(123) + +pinguins |> + summarise( + across( + .cols = where(is.numeric), + .fns = mean + ) + ) + +media_sem_na <- function(x) { + mean(x, na.rm = TRUE) +} + +pinguins |> + summarise( + across( + .cols = where(is.numeric), + .fns = media_sem_na + ) + ) + +pinguins |> + summarise( + across( + .cols = where(is.numeric), + .fns = mean, na.rm = TRUE + ) + ) + +# + avançada +pinguins |> + summarise( + across( + .cols = where(is.numeric), + .fns = \(x) mean(x, na.rm = TRUE) + ) + ) + +# obs: \() é SINONIMO de function()