gpt4 book ai didi

r - 如何在R中的组内排名?

转载 作者:行者123 更新时间:2023-12-03 01:44:52 25 4
gpt4 key购买 nike

这是我的数据框:

  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 的最高订单值(value)。

有谁知道我如何在 R 中做到这一点?我可以在哪里对数据框中的一组指定变量进行排名?

最佳答案

评分最高的答案(由 cdeterman 提供)实际上是不正确的。 order 函数提供第 1、第 2、第 3 等排名值的位置,而不是当前顺序中值的排名。

让我们举一个简单的例子,我们想要排名,从最大的开始,按客户名称分组。我已经添加了手动排名,以便我们可以检查值

    > df
customer_name order_values manual_rank
1 John 2 5
2 John 5 2
3 John 9 1
4 John 1 6
5 John 4 3
6 John 3 4
7 Lucy 4 4
8 Lucy 9 1
9 Lucy 6 3
10 Lucy 2 6
11 Lucy 8 2
12 Lucy 3 5

如果我运行 cdeterman 建议的代码,我会得到以下不正确的排名:

    > df %>%
+ group_by(customer_name) %>%
+ mutate(my_ranks = order(order_values, decreasing=TRUE))
Source: local data frame [12 x 4]
Groups: customer_name [2]

customer_name order_values manual_rank my_ranks
<fctr> <dbl> <dbl> <int>
1 John 2 5 3
2 John 5 2 2
3 John 9 1 5
4 John 1 6 6
5 John 4 3 1
6 John 3 4 4
7 Lucy 4 4 2
8 Lucy 9 1 5
9 Lucy 6 3 3
10 Lucy 2 6 1
11 Lucy 8 2 6
12 Lucy 3 5 4

顺序用于将数据帧重新排序为降序或升序。我们真正想要的是运行两次排序函数,第二次排序函数给出我们想要的实际排名。

    > df %>%
+ group_by(customer_name) %>%
+ mutate(good_ranks = order(order(order_values, decreasing=TRUE)))
Source: local data frame [12 x 4]
Groups: customer_name [2]

customer_name order_values manual_rank good_ranks
<fctr> <dbl> <dbl> <int>
1 John 2 5 5
2 John 5 2 2
3 John 9 1 1
4 John 1 6 6
5 John 4 3 3
6 John 3 4 4
7 Lucy 4 4 4
8 Lucy 9 1 1
9 Lucy 6 3 3
10 Lucy 2 6 6
11 Lucy 8 2 2
12 Lucy 3 5 5

关于r - 如何在R中的组内排名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31859175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com