【发布时间】:2015-10-29 19:16:40
【问题描述】:
好的,看看这个数据框...
customer_name order_dates order_values
1 John 2010-11-01 15
2 Bob 2008-03-25 12
3 Alex 2009-11-15 5
4 John 2012-08-06 15
5 John 2015-05-07 20
假设我想添加一个订单变量,该变量按名称、最大订单日期、使用决胜局的最后订单日期对最高订单价值进行排名。所以,最终数据应该是这样的:
customer_name order_dates order_values ranked_order_values_by_max_value_date
1 John 2010-11-01 15 3
2 Bob 2008-03-25 12 1
3 Alex 2009-11-15 5 1
4 John 2012-08-06 15 2
5 John 2015-05-07 20 1
每个人的单笔订单都得1分,之后的所有订单都根据该值进行排名,决胜局是最后一个订单日期获得优先权。 在此示例中,John 的 2012 年 8 月 6 日订单排名第 2,因为它是在 2010 年 11 月 1 日之后放置的。 2015 年 5 月 7 日的订单是 1,因为它是最大的。因此,即使该订单是 20 年前下的,它也应该是排名第一的,因为它是 John 的最高订单价值。
有谁知道我如何在 R 中做到这一点?我可以在数据框中的一组指定变量中进行排名吗?
感谢您的帮助!
【问题讨论】:
-
@akrun 价值的决胜局怎么样?
-
这是制作数据框的代码,以防万一:customer_name
-
@SenorO OP 的示例测试起来应该更复杂一些。此外,来自
dplyr的dense_rank是一种决胜局 -
@akun:价值的决胜局将是订单日期。所以约翰有两个 15 美元的订单,但最先下的那个排名更高。
-
可能是
setDT(df1)[, rnk := order(desc(order_values), desc(order_dates)), customer_name]使用data.table