Использование Mutate для ранжирования определенных столбцов - PullRequest
0 голосов
/ 03 мая 2018

Я относительный новичок к dplyr. У меня есть data.frame, организованные с каждым названием магазина и источником (составленным из результатов за 2018), составляющим наблюдения. Переменными являются общий доход, количество, оценка качества обслуживания клиентов и некоторые другие.

Я бы хотел оценить каждую категорию в data.frame и создать новые наблюдения. Все переменные будут ранжироваться в порядке убывания, но пользовательский опыт и один дополнительный столбец будут ранжироваться в порядке возрастания. Источник, который я хотел бы назвать это будет называться «звания».

store <- c("NYC", "Chicago", "Boston")
source <- c("2018", "2018", "2018")
revenue <- c(10000, 50000, 2000)
quantity <- c(100, 50, 20)
satisfaction <- c(3, 2, 5)
table <- cbind(store, source, revenue, quantity, satisfaction)

Мне удалось получить то, что мне было нужно, используя mutate, но мне пришлось вручную называть каждый новый столбец. Я уверен, что есть более эффективный способ ранжировать эти значения!

Вот что я сделал изначально:

table <- table %>%
mutate(revenue_rank = rank(-revenue), quantity_rank = rank(-quantity), satisfaction_rank = rank(satisfaction))

1 Ответ

0 голосов
/ 03 мая 2018

В общем, если вам нужно что-то делать повторно во фрейме данных, например, вычислять ранги, вы, вероятно, захотите изменить форму на длинные данные. Также обратите внимание, что то, что вы получили от cbind - это матрица, а не фрейм данных - вероятно, не то, что вам нужно, поскольку это означает, что числовые переменные фактически отображаются в виде символов. Вместо cbind используйте data.frame или data_frame (для тибля).

То, что я сделал здесь, собрано в длинный фрейм данных, сгруппированный по показателям (доход, количество или удовлетворение), а затем присвоил ранги на основе значения, имея в виду, что вам нужны разные заказы для удовлетворения и другие показатели .

library(tidyverse)

store <- c("NYC", "Chicago", "Boston")
source <- c("2018", "2018", "2018")
revenue <- c(10000, 50000, 2000)
quantity <- c(100, 50, 20)
satisfaction <- c(3, 2, 5)

df <- data_frame(store, source, revenue, quantity, satisfaction)

df %>%
    gather(key = measure, value = value, revenue:satisfaction) %>%
    group_by(measure) %>%
    mutate(rank = ifelse(measure == "satisfaction", rank(value), rank(-value))) %>%
    ungroup() %>%
    select(-value) %>%
    mutate(measure = paste(measure, "rank", sep = "_")) %>%
    spread(key = measure, value = rank)
#> # A tibble: 3 x 5
#>   store   source quantity_rank revenue_rank satisfaction_rank
#>   <chr>   <chr>          <dbl>        <dbl>             <dbl>
#> 1 Boston  2018               3            3                 3
#> 2 Chicago 2018               2            1                 1
#> 3 NYC     2018               1            2                 2

Создано в 2018-05-04 пакетом Представ (v0.2.0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...