Powiedzmy, że jestem dyrektorem firmy dostaw i chciałbym rozwiązać, w których warunki moje produkty dotrą do odbiorców w dobrej jakości (np. Nie zepsuty, nadal dobrze otoczone itp.).

Product operator1   operator2   operator3   operator4   weather day quality
product1    x   0   0   x   sun mon x
product2    0   x   0   0   grey    tue 0
product3    x   x   x   x   grey    mon x
product4    0   x   0   0   cloudy  fri 0
product5    0   0   x   x   grey    sat 0
product6    x   x   0   0   grey    wed x
product7    x   0   0   x   cloudy  wed 0
product8    0   0   x   x   grey    wed x
product9    x   0   0   0   grey    mon 0
product10   0   0   x   0   cloudy  tue x

Mam więc ten (proxy) tabeli i chciałbym wyodrębnić takie informacje w dowolnej kombinacji i liczbie zmiennych ex:

Operator1 = x
Operator2 = x
Operator3 = x
Operator4 = x
Weather = sunny
Day = mon
Operator1 = x + Operator2 = x
Operator1 = x + weather = sunny
etc..

Aby przetestować, gdy stosunek (n. produktów w dobrej jakości) / (n. produktów filtrowanych na określonych wartościach zmiennych) Poznaj współczynnik mówić> 0,8. W ten sposób określiłbym, jakie są najlepsze warunki do dostarczania moich produktów. Rozumiem jest złożone pytanie, ale mam nadzieję, że jest ktoś, kto zna jakiś sposób lub jakieś konkretne (najlepiej R) pakiety, które mogą rozwiązać ten temat.

Przepraszam również za tytuł. To pierwszy raz, kiedy dotyczy takiego rodzaju tematu. Z góry dziękuję za pomoc

0
mightaskalot 19 grudzień 2019, 19:35

1 odpowiedź

Najlepsza odpowiedź

Z pewnością możliwe jest wykonanie tego, co chcesz, a dam ci przykład tego, jak można go osiągnąć, ale wygląda na to, że możesz zrobić z czytaniem dobrego podkładu na r, aby zrozumieć różne typy danych i podstawowe koncepcje manipulacji danych.

Po pierwsze, załaduję kopię danych do R jako ramki danych:

data.frame(Product = paste0("product", 1:10),
           operator1 = unlist(strsplit("x0x00xx0x0", "")),
           operator2 = unlist(strsplit("0xxx0x0000", "")),
           operator3 = unlist(strsplit("00x0x00x0x", "")),
           operator4 = unlist(strsplit("x0x0x0xx00", "")),
           weather   = c("sun", "grey", "grey", "cloudy", "grey", 
                         "grey", "cloudy", "grey", "grey", "grey"),
           day       = c("mon", "tue", "mon", "fri", "sat", 
                         "wed", "wed", "wed", "mon", "tue"),
           quality = unlist(strsplit("x0x00x0x0x", ""))) -> deliveries

Aby pokazać, że jest to samo, co twoje dane:

> deliveries
     Product operator1 operator2 operator3 operator4 weather day quality
1   product1         x         0         0         x     sun mon       x
2   product2         0         x         0         0    grey tue       0
3   product3         x         x         x         x    grey mon       x
4   product4         0         x         0         0  cloudy fri       0
5   product5         0         0         x         x    grey sat       0
6   product6         x         x         0         0    grey wed       x
7   product7         x         0         0         x  cloudy wed       0
8   product8         0         0         x         x    grey wed       x
9   product9         x         0         0         0    grey mon       0
10 product10         0         0         x         0    grey tue       x

Teraz musimy dokonać tabeli w formacie, który można prawidłowo przetworzyć. Kolumny 0's i X nie będą rozumiane przez R, więc musisz przekonwertować je w wartości True / False, lub wartości 0/1. Możemy to zrobić za pomocą pakietu dplyr, który jest częścią tidyverse:

install.packages("tidyverse")
library(tidyverse)

deliveries %<>% transmute(Product = Product,
                          operator1 = as.numeric(operator1 == "x"),
                          operator2 = as.numeric(operator2 == "x"),
                          operator3 = as.numeric(operator3 == "x"),
                          operator4 = as.numeric(operator4 == "x"),
                          weather = weather,
                          day = day,
                          quality   = as.numeric(quality == "x"))

Teraz Twoje dane wyglądają tak:

     Product operator1 operator2 operator3 operator4 weather day quality
1   product1         1         0         0         1     sun mon       1
2   product2         0         1         0         0    grey tue       0
3   product3         1         1         1         1    grey mon       1
4   product4         0         1         0         0  cloudy fri       0
5   product5         0         0         1         1    grey sat       0
6   product6         1         1         0         0    grey wed       1
7   product7         1         0         0         1  cloudy wed       0
8   product8         0         0         1         1    grey wed       1
9   product9         1         0         0         0    grey mon       0
10 product10         0         0         1         0    grey tue       1

Teraz możesz podsumować proporcje dla dowolnej kombinacji, którą wybierzesz, umieszczając nazwy kolumn w funkcji Group_by. W tym przypadku wykonajmy operatora1, dzień i pogodę:

deliveries %>% 
  group_by(operator1, day, weather) %>% 
  summarise(quality = paste0(mean(quality) * 100, "%"))

Mam nadzieję, że daje rodzaj wyniku, którego szukasz, z proporcją dostaw jakości pokazanych dla każdej kombinacji zmiennych.

# A tibble: 8 x 4
# Groups:   operator1, day [?]
  operator1 day   weather quality
      <dbl> <fct> <fct>   <chr>  
1         0 fri   cloudy  0%     
2         0 sat   grey    0%     
3         0 tue   grey    50%    
4         0 wed   grey    100%   
5         1 mon   grey    50%    
6         1 mon   sun     100%   
7         1 wed   cloudy  0%     
8         1 wed   grey    100%  

Jeśli chcesz zobaczyć różne kombinacje, zmień zmienne przekazane do group_by do tego, co chcesz.

1
Allan Cameron 19 grudzień 2019, 19:48