对于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))发布于 2018-05-04 00:02:53
通常,如果您必须在数据框中重复执行某些操作,例如计算等级,则可能需要对长数据进行整形。还要注意,从cbind得到的是一个矩阵,而不是数据帧--可能不是您想要的,因为这意味着数值变量实际上是字符。使用data.frame或data_frame (对于cbind )而不是tibble。
我在这里做的是收集到一个很长的数据框架中,按衡量标准(收入、数量或满意度)分组,然后根据价值给出排名,记住你想要不同的满意度和其他衡量标准。
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由reprex package创建于2018-05-04 (v0.2.0)。
https://stackoverflow.com/questions/50158380
复制相似问题