R делает набор данных - PullRequest
       0

R делает набор данных

1 голос
/ 23 февраля 2020
Manufacturer <- c("WARNER","TONYS","TOMBSTONE", "SNYDER", "SHULTZ", "QUAKER", "PRIVATE_LABEL", "POST_FOOD", "P&G", "MKSL", "KING", "KELLOGG", "GENERAL_MI", "FRITO_LAY", "COLGATE", "CHATTEM")
Max <- c(4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4)
Min <- c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
Price_elasticity <- c(1.343, 3.741, 3.612, 0.7562, 0.6249, 3.393, 0.7283, 1.117, 0.3996, 2.414, 3.024, 3.031, 1.470, 2.416, 0.2536, 1.129)
MANUF_PE <- data.frame(Manufacturer, Min, Max, Price_elasticity)

Если я сделаю это, я получу

  Manufacturer     Min     Max     
1   WARNER          0       4      1.3430
2   TONYS           0       4      3.7410
3   TOMBSTONE       0       4      3.6120
4   SNYDER          0       4      0.7562
5   SHULTZ          0       4      0.6249
6   QUAKER          0       4      3.3930
7   PRIVATE_LABEL   0       4      0.7283
8   POST_FOOD       0       4      1.1170
9   P&G             0       4      0.3996
10  MKSL            0       4      2.4140 
11  KING            0       4      3.0240
12  KELLOGG         0       4      3.0310
13  GENERAL_MI      0       4      1.4700
14  FRITO_LAY       0       4      2.4160
15  COLGATE         0       4      0.2536
16  CHATTEM         0       4      1.1290

Но я надеялся, что смогу заставить его выглядеть так:

this is how I want it to look

Так что я могу использовать его для этого радиолокационного графика:

library(ggplot2)



radarchart( manu_pe  , axistype=1 , 

            #custom polygon
            pcol=rgb(0.8,0.2,0.5,0.9) , pfcol=rgb(0.8,0.2,0.5,0.4) , plwd=4 , plty=1, , 

            #custom the grid
            cglcol="grey", cglty=1, axislabcol="grey", caxislabels=seq(0,4,1), cglwd=0.2,

            #custom labels
            vlcex=0.8 
)

Я попытался сделать это, перевернув кадр данных, но это не беспокоило ... Пожалуйста, помогите спасибо!

Ответы [ 3 ]

3 голосов
/ 23 февраля 2020

Мы можем изменить его в длинный формат, а затем преобразовать в «широкий» с помощью names_from столбца «Производитель»

library(dplyr)
library(tidyr)
MANUF_PE %>% 
    pivot_longer(cols = -Manufacturer) %>%
    pivot_wider(names_from = Manufacturer, values_from = value)
# A tibble: 3 x 17
#  name  WARNER TONYS TOMBSTONE SNYDER SHULTZ QUAKER PRIVATE_LABEL POST_FOOD `P&G`  MKSL  KING KELLOGG
#  <chr>  <dbl> <dbl>     <dbl>  <dbl>  <dbl>  <dbl>         <dbl>     <dbl> <dbl> <dbl> <dbl>   <dbl>
#1 Min     0     0         0     0      0       0            0          0    0      0     0       0   
#2 Max     4     4         4     4      4       4            4          4    4      4     4       4   
#3 Pric…   1.34  3.74      3.61  0.756  0.625   3.39         0.728      1.12 0.400  2.41  3.02    3.03
# … with 4 more variables: GENERAL_MI <dbl>, FRITO_LAY <dbl>, COLGATE <dbl>, CHATTEM <dbl>

Если нам нужен radarchart

library(fmsb)
library(tibble)
MANUF_PE %>% 
    pivot_longer(cols = -Manufacturer) %>%
    pivot_wider(names_from = Manufacturer, values_from = value) %>% 
    column_to_rownames("name") %>% 
    radarchart(axistype = 1,  pcol=rgb(0.8,0.2,0.5,0.9),
     pfcol=rgb(0.8,0.2,0.5,0.4), plwd=4 , plty=1,  cglcol="grey", 
     cglty=1, axislabcol="grey", caxislabels=seq(0,4,1), cglwd=0.2, 
     vlcex=0.8 )

enter image description here

Если столбцы должны быть в указанном порядке

MANUF_PE %>% 
    pivot_longer(cols = -Manufacturer) %>% 
    pivot_wider(names_from = Manufacturer, values_from = value) %>%
    arrange(factor(name, levels = c("Max", "Min", "Price_elasticity"))) %>%
    column_to_rownames("name") %>% 
    radarchart(axistype = 1,  pcol=rgb(0.8,0.2,0.5,0.9) ,
      pfcol=rgb(0.8,0.2,0.5,0.4) , plwd=4 , plty=1,  cglcol="grey", cglty=1,
       axislabcol="grey", caxislabels=seq(0,4,1), cglwd=0.2, vlcex=0.8 )
1 голос
/ 24 февраля 2020

Вы можете использовать data.table::transpose(). Вывод будет обычным data.frame, если ввод:

data.table::transpose(MANUF_PE,keep.names = "name",make.names = "Manufacturer")
#>               name WARNER TONYS TOMBSTONE SNYDER SHULTZ QUAKER PRIVATE_LABEL
#> 1              Min  0.000 0.000     0.000 0.0000 0.0000  0.000        0.0000
#> 2              Max  4.000 4.000     4.000 4.0000 4.0000  4.000        4.0000
#> 3 Price_elasticity  1.343 3.741     3.612 0.7562 0.6249  3.393        0.7283
#>   POST_FOOD    P&G  MKSL  KING KELLOGG GENERAL_MI FRITO_LAY COLGATE CHATTEM
#> 1     0.000 0.0000 0.000 0.000   0.000       0.00     0.000  0.0000   0.000
#> 2     4.000 4.0000 4.000 4.000   4.000       4.00     4.000  4.0000   4.000
#> 3     1.117 0.3996 2.414 3.024   3.031       1.47     2.416  0.2536   1.129
0 голосов
/ 23 февраля 2020

Что касается преобразования искомых данных, простое базовое решение R состоит в использовании t для преобразования столбцов в строки и наоборот:

t(MANUF_PE)
                 [,1]     [,2]     [,3]        [,4]     [,5]     [,6]     [,7]            [,8]       
Manufacturer     "WARNER" "TONYS"  "TOMBSTONE" "SNYDER" "SHULTZ" "QUAKER" "PRIVATE_LABEL" "POST_FOOD"
Min              "0"      "0"      "0"         "0"      "0"      "0"      "0"             "0"        
Max              "4"      "4"      "4"         "4"      "4"      "4"      "4"             "4"        
Price_elasticity "1.3430" "3.7410" "3.6120"    "0.7562" "0.6249" "3.3930" "0.7283"        "1.1170"   
                 [,9]     [,10]    [,11]    [,12]     [,13]        [,14]       [,15]     [,16]    
Manufacturer     "P&G"    "MKSL"   "KING"   "KELLOGG" "GENERAL_MI" "FRITO_LAY" "COLGATE" "CHATTEM"
Min              "0"      "0"      "0"      "0"       "0"          "0"         "0"       "0"      
Max              "4"      "4"      "4"      "4"       "4"          "4"         "4"       "4"      
Price_elasticity "0.3996" "2.4140" "3.0240" "3.0310"  "1.4700"     "2.4160"    "0.2536"  "1.1290"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...