Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何匹配R中子集的最小值,然后进行查找? 输入_R_Merge_Aggregate_Lookup - Fatal编程技术网

如何匹配R中子集的最小值,然后进行查找? 输入

如何匹配R中子集的最小值,然后进行查找? 输入,r,merge,aggregate,lookup,R,Merge,Aggregate,Lookup,我有按客户和订单细分的数据,例如 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 输出 我的目标是: 查找每

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

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
输出 我的目标是:

  • 查找每个客户的首次订购日期(最小值)。让我们假设每个客户都有一个唯一的首次订购日期(我也有时间,以防日期出现平局)
  • 然后进行查找以查找所使用的一阶源
  • 最后,使用此信息创建一个新列,即


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

    我们可以在按“客户ID”分组后执行此操作,将“订单日期”转换为
    Date
    类,获取最小“日期”的索引(
    which.min
    ),获取“Order_Source”和
    mutate
    的相应值以创建新列

    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
    
    库(dplyr)
    df1%>%
    分组依据(客户ID)%>%
    变异(第一个订单来源=订单来源[哪个.min(作为.Date(订单的日期,“%m/%d/%Y”))))
    #客户ID订单来源日期第一批订单来源
    #                                       
    #1 1在线商店2017年1月3日
    #2 1电话2017年1月2日商店
    #3 1商店2017年1月1日商店
    #4.2传真2017年1月2日电话
    #5.2电话2017年1月1日电话
    
    我们可以在按“客户ID”分组后执行此操作,将“订单日期”转换为
    Date
    类,获取最小“日期”的索引(
    which.min
    ),获取“订单来源”的对应值,并
    修改
    以创建新列

    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
    
    库(dplyr)
    df1%>%
    分组依据(客户ID)%>%
    变异(第一个订单来源=订单来源[哪个.min(作为.Date(订单的日期,“%m/%d/%Y”))))
    #客户ID订单来源日期第一批订单来源
    #                                       
    #1 1在线商店2017年1月3日
    #2 1电话2017年1月2日商店
    #3 1商店2017年1月1日商店
    #4.2传真2017年1月2日电话
    #5.2电话2017年1月1日电话
    
    这里有一个基本的R方法,使用
    ave
    按客户分组:

    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)]
    })
    

    df这里有一个基本R方法,使用
    ave
    按客户分组:

    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)]
    })
    

    df@989:很好。我本应该包括我的尝试,但我恐怕在我发布的机器上没有代码。@989:说得好。我本应该包括我的尝试,但我恐怕在我发布的机器上没有代码。