【问题标题】:How do I match the minimum of a subset in R, then do a lookup?如何匹配 R 中子集的最小值,然后进行查找?
【发布时间】:2017-08-29 07:39:03
【问题描述】:

输入

我有按客户和订单细分的数据,例如

Customer_ID Order_Source Date_of_order
1           Online       03/01/2017
1           Phone        02/01/2017
1           Store        01/01/2017
2           Fax          02/01/2017
2           Phone        01/01/2017

输出

我的目标是:

  1. 查找每个客户的第一个订单日期(最小值)。假设每个客户都有一个唯一的第一个订单日期(我也有时间,以防日期相同)
  2. 然后进行查找以找到使用的一阶源
  3. 最后,使用此信息创建一个新列,即

Customer_ID Order_Source Date_of_order   First_Order_Source
    1           Online       03/01/2017  Store
    1           Phone        02/01/2017  Store
    1           Store        01/01/2017  Store
    2           Fax          02/01/2017  Phone
    2           Phone        01/01/2017  Phone

我的问题是,如何从这样的子集的最小值中查找?

【问题讨论】:

  • @989:好点。我会包括我的尝试,但恐怕我发布的机器上没有代码。

标签: r merge aggregate lookup


【解决方案1】:

我们可以通过'Customer_ID'分组后,将'Date_of_order'转换为Date类,得到最小'Date'的索引(which.min),得到'Order_Source'和@987654323的对应值@ 创建一个新列。

library(dplyr)
df1 %>% 
    group_by(Customer_ID) %>%
    mutate(First_Order_Source = Order_Source[which.min(as.Date(Date_of_order, "%m/%d/%Y"))])
#   Customer_ID Order_Source Date_of_order First_Order_Source    
#        <int>        <chr>         <chr>              <chr>
#1           1       Online    03/01/2017              Store
#2           1        Phone    02/01/2017              Store
#3           1        Store    01/01/2017              Store
#4           2          Fax    02/01/2017              Phone
#5           2        Phone    01/01/2017              Phone

【讨论】:

    【解决方案2】:

    这是使用ave 按客户分组的基本 R 方法:

    df <- within(df, {
      Date_of_order <- as.Date(Date_of_order, format = "%d/%m/%Y")
      first_order <- Order_Source[ave(as.integer(Date_of_order), Customer_ID, FUN = which.min)]
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      相关资源
      最近更新 更多