R:查找顶部、中间和底部值以在 dplyr 中创建类别列

标签 r dplyr

我想根据销售额和年份在下面的数据集中创建一个“类别”列。

set.seed(30)

df <- data.frame(
  Year = rep(2010:2015, each = 6),
  Country = rep(c('India', 'China', 'Japan', 'USA', 'Germany', 'Russia'), 6),
  Sales = round(runif(18, 100, 900))
)

head(df)

   Year Country Sales
1  2010   India   661
2  2010   China   888
3  2010   Japan   285
4  2010     USA   272
5  2010 Germany   332
6  2010  Russia   660

类别有:

每年销售额最高的 2 个国家/地区:类别 - 1

每年销售额最低的 2 个国家/地区:类别 - 3

按年份划分的其余国家/地区:类别 - 2

预期的数据集可能如下所示:

   Year Country Sales Category
1  2010   India   661        1
2  2010   China   888        1
3  2010   Japan   285        3
4  2010     USA   272        3
5  2010 Germany   332        2
6  2010  Russia   660        2

最佳答案

这里你不需要太多;只需group_by年,从最大到最小销售额排列,然后使用mutate添加一个新列,其中填充2:

df %>% group_by(Year) %>% 
    arrange(desc(Sales)) %>% 
    mutate(Category = c(1, 1, rep(2, n()-4), 3, 3))

# Source: local data frame [36 x 4]
# Groups: Year [6]
# 
#     Year Country Sales Category
#    (int)  (fctr) (dbl)    (dbl)
# 1   2010   China   491        1
# 2   2010     USA   436        1
# 3   2010   Japan   391        2
# 4   2010 Germany   341        2
# 5   2010  Russia   218        3
# 6   2010   India   179        3
# 7   2011   Japan   873        1
# 8   2011   India   819        1
# 9   2011  Russia   418        2
# 10  2011   China   279        2
# ..   ...     ...   ...      ...

如果国家数量少于四个,它就会失败,但这听起来不像是一个问题。

关于R:查找顶部、中间和底部值以在 dplyr 中创建类别列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37063452/

相关文章:

r - 在r中加入多个数据帧

r - 在 R 中使用 ggplot2 绘制地铁图

r - 使用 dplyr 计算行之间的差异时间

r - 通过使用 group_split 和 group_map 对变量进行分组,使用 tabyl 进行制表

r - Bind_rows() 错误 : "Argument 1 must have names"//Occurs after tidyverse update

r - 在 R 中指定 NA 的类(对于 if_else、dplyr)

r - 在 R 中直接绘制数学函数

r - rpart 和 party 包完全不同的决策树

mysql - 如何让 Shiny 的应用程序与云关系数据库(在 MySQL 中)对话?

将 df reshape 为数据面板模型