我想根据销售额和年份在下面的数据集中创建一个“类别”列。
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/