# SETAR DIRETORIO ==============================================================
my.path <- dirname(rstudioapi::getActiveDocumentContext()$path)
setwd(my.path)
#
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6     ✔ purrr   0.3.4
## ✔ tibble  3.1.8     ✔ dplyr   1.0.9
## ✔ tidyr   1.2.0     ✔ stringr 1.4.0
## ✔ readr   2.1.2     ✔ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(readr)
data <- read.csv("data.csv")

# data <- read_delim("Input_example_2022-08-28.csv",
#                     delim = ";", escape_double = FALSE, trim_ws = TRUE)
#
data
##        criteria Xiaomi Samsung iPhone min_max
## 1         Custo   1500    1800   5000     min
## 2        Camera     12      12     20     max
## 3 Armazenamento     64     128    128     max
## 4       Bateria     24      18     10     max
data2 <- data %>% pivot_longer(cols=-c(1,dim(data)[2])) %>%
  group_by(criteria) %>%
  mutate(value=ifelse(min_max=="min", 1/value,value)) %>%
  mutate(sum=sum(value),
         norm=value/sum) %>%
  mutate(mean=mean(norm),
         sd=sd(norm),
         factor=sd/mean)
data2
## # A tibble: 12 × 9
## # Groups:   criteria [4]
##    criteria      min_max name         value       sum  norm  mean    sd factor
##    <chr>         <chr>   <chr>        <dbl>     <dbl> <dbl> <dbl> <dbl>  <dbl>
##  1 Custo         min     Xiaomi    0.000667   0.00142 0.469 0.333 0.171  0.514
##  2 Custo         min     Samsung   0.000556   0.00142 0.391 0.333 0.171  0.514
##  3 Custo         min     iPhone    0.0002     0.00142 0.141 0.333 0.171  0.514
##  4 Camera        max     Xiaomi   12         44       0.273 0.333 0.105  0.315
##  5 Camera        max     Samsung  12         44       0.273 0.333 0.105  0.315
##  6 Camera        max     iPhone   20         44       0.455 0.333 0.105  0.315
##  7 Armazenamento max     Xiaomi   64        320       0.2   0.333 0.115  0.346
##  8 Armazenamento max     Samsung 128        320       0.4   0.333 0.115  0.346
##  9 Armazenamento max     iPhone  128        320       0.4   0.333 0.115  0.346
## 10 Bateria       max     Xiaomi   24         52       0.462 0.333 0.135  0.405
## 11 Bateria       max     Samsung  18         52       0.346 0.333 0.135  0.405
## 12 Bateria       max     iPhone   10         52       0.192 0.333 0.135  0.405
weights <- data2 %>% select(criteria,factor) %>% unique %>%
  pivot_wider(names_from = criteria, values_from = factor) %>%
  pivot_longer(cols=1:nrow(data), names_to = "criteria", values_to = "factor") %>%
  mutate(factor=factor/sum(factor))

weights
## # A tibble: 4 × 2
##   criteria      factor
##   <chr>          <dbl>
## 1 Custo          0.325
## 2 Camera         0.199
## 3 Armazenamento  0.219
## 4 Bateria        0.256
data3 <- data2 %>% select(criteria,name,norm) %>%
  pivot_wider(names_from = name,values_from = norm)

data3
## # A tibble: 4 × 4
## # Groups:   criteria [4]
##   criteria      Xiaomi Samsung iPhone
##   <chr>          <dbl>   <dbl>  <dbl>
## 1 Custo          0.469   0.391  0.141
## 2 Camera         0.273   0.273  0.455
## 3 Armazenamento  0.2     0.4    0.4  
## 4 Bateria        0.462   0.346  0.192
data3 %>% left_join(weights) %>% pivot_longer(cols=-c(1,dim(data)[2])) %>%
  mutate(value_factor=factor*value) %>%
  select(criteria,name,value_factor) %>%
  group_by(name) %>% mutate(ponderacoes=sum(value_factor)) %>% arrange(name) %>%
  select(-c(value_factor,criteria)) %>% unique %>% ungroup() %>% arrange(desc(ponderacoes)) %>%
  mutate(rank=1,
         rank=cumsum(rank))
## Joining, by = "criteria"
## # A tibble: 3 × 3
##   name    ponderacoes  rank
##   <chr>         <dbl> <dbl>
## 1 Xiaomi        0.369     1
## 2 Samsung       0.358     2
## 3 iPhone        0.273     3