# 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