#############################
# Cid Edson Mendonça Póvoas #
#############################
# Função summy
summy <- function(x, num_var, ..., digit=2){
options(tidyverse.quiet = TRUE)
if(!require(tidyverse))
install.packages("tidyverse")
library(tidyverse)
group_var <- quos(...)
num_var <- enquo(num_var)
x %>%
dplyr::group_by(!!!group_var) %>%
dplyr::summarize(n = n(),
min = min(!!num_var, na.rm = T),
mean = mean(!!num_var, na.rm = T),
max = max(!!num_var, na.rm = T),
sd = sd(!!num_var, na.rm = T),
se = sd/sqrt(n),
var = var(!!num_var, na.rm = T),
"cv(%)" = (sd/mean)*100,
sum = sum(!!num_var, na.rm = T)) %>%
mutate_if(is.numeric,round,digit)
}
# Criando banco de dados
state <- c("tas", "sa", "qld", "nsw", "nsw", "nt", "wa", "wa",
"qld", "vic", "nsw", "vic", "qld", "qld", "sa", "tas",
"sa", "nt", "wa", "vic", "qld", "nsw", "nsw", "wa",
"sa", "act", "nsw", "vic", "vic", "act")
incomes <- c(60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 56,
61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46,
59, 46, 58, 43)
df <- data.frame(state,incomes)
#Utilizando a função com 1 digito
summy(df,incomes,state,digit = 1) |> as.data.frame()
## Loading required package: tidyverse
## Warning: package 'ggplot2' was built under R version 4.1.3
## Warning: package 'tibble' was built under R version 4.1.3
## Warning: package 'dplyr' was built under R version 4.1.3
## state n min mean max sd se var cv(%) sum
## 1 act 2 43 44.5 46 2.1 1.5 4.5 4.8 89
## 2 nsw 6 41 57.3 70 10.6 4.3 111.5 18.4 344
## 3 nt 2 51 55.5 60 6.4 4.5 40.5 11.5 111
## 4 qld 5 40 53.6 62 9.2 4.1 84.3 17.1 268
## 5 sa 4 49 55.0 61 5.5 2.7 30.0 10.0 220
## 6 tas 2 60 60.5 61 0.7 0.5 0.5 1.2 121
## 7 vic 5 42 56.0 69 11.7 5.2 137.5 20.9 280
## 8 wa 4 48 52.2 59 5.3 2.7 28.2 10.2 209
# usando o objeto iris, com o padrão de 2 digitos
summy(iris, Sepal.Length, Species) |> as.data.frame()
## Species n min mean max sd se var cv(%) sum
## 1 setosa 50 4.3 5.01 5.8 0.35 0.05 0.12 7.04 250.3
## 2 versicolor 50 4.9 5.94 7.0 0.52 0.07 0.27 8.70 296.8
## 3 virginica 50 4.9 6.59 7.9 0.64 0.09 0.40 9.65 329.4
#utilizando o pipe ("|>") a com 4 digitos...
iris |> summy(Sepal.Length, Species, digit = 4) |> as.data.frame()
## Species n min mean max sd se var cv(%) sum
## 1 setosa 50 4.3 5.006 5.8 0.3525 0.0498 0.1242 7.0413 250.3
## 2 versicolor 50 4.9 5.936 7.0 0.5162 0.0730 0.2664 8.6956 296.8
## 3 virginica 50 4.9 6.588 7.9 0.6359 0.0899 0.4043 9.6521 329.4