Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.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_Dataframe_Datetime_Filtering_Data Wrangling - Fatal编程技术网

R 如何根据条件日期时间(第一条记录或最后一条记录)和随时间变化的事件计数对数据进行分组

R 如何根据条件日期时间(第一条记录或最后一条记录)和随时间变化的事件计数对数据进行分组,r,dataframe,datetime,filtering,data-wrangling,R,Dataframe,Datetime,Filtering,Data Wrangling,我得到了两个数据帧: 数据框A:包含在服装店购买的信息,变量包括:客户名称、购买日期、代理人和在t期间购买的产品 名称 产品 代理人 购买日期 凯伦 M_14 X_1 8-25-20021 18:21:28 斜纹棉布 M_78 X_3 8-26-20021 18:11:06 斜纹棉布 M_71 X_4 8-26-20021 18:21:01 斜纹棉布 M_64 X_4 8-27-20021 20:21:59 基思 M_57 X_4 8-27-20021 20:21:02 阿尔巴 M_5

我得到了两个数据帧:

数据框A:包含在服装店购买的信息,变量包括:客户名称、购买日期、代理人和在t期间购买的产品

名称 产品 代理人 购买日期 凯伦 M_14 X_1 8-25-20021 18:21:28 斜纹棉布 M_78 X_3 8-26-20021 18:11:06 斜纹棉布 M_71 X_4 8-26-20021 18:21:01 斜纹棉布 M_64 X_4 8-27-20021 20:21:59 基思 M_57 X_4 8-27-20021 20:21:02 阿尔巴 M_50 X_1 8-28-20021 20:21:03 阿尔巴 M_43 X_3 8-29-20021 20:21:04 亚历克斯 M_36 X_2 8-25-20021 20:21:05
这应该可以做到,但肯定还有改进的余地:

library(tidyverse)

df1 <- tibble::tribble(
  ~NAME, ~PRODUCT, ~AGENT,        ~DATE_PURCHASE,
  "Karen",   "M_14",  "X_1", "8-25-20021 18:21:28",
  "Jean",   "M_78",  "X_3", "8-26-20021 18:11:06",
  "Jean",   "M_71",  "X_4", "8-26-20021 18:21:01",
  "Jean",   "M_64",  "X_4", "8-27-20021 20:21:59",
  "Keith",   "M_57",  "X_4", "8-27-20021 20:21:02",
  "Alba",   "M_50",  "X_1", "8-28-20021 20:21:03",
  "Alba",   "M_43",  "X_3", "8-29-20021 20:21:04",
  "Alex",   "M_36",  "X_2", "8-25-20021 20:21:05"
)

df2 <- tibble::tribble(
  ~NAME,        ~TYPE,         ~DATE_OF_CALL,        ~DATE_PURCHASE,
  "Karen",   "COMPLAIN", "8-26-20021 18:21:28", "8-25-20021 18:21:28",
  "Jean", "CX_SERVICE", "8-27-20021 18:11:06", "8-26-20021 18:11:06",
  "Jean",   "COMPLAIN", "8-28-20021 18:21:01", "8-26-20021 18:21:01",
  "Jean", "CX_SERVICE", "8-29-20021 20:21:59", "8-27-20021 20:21:59",
  "Keith", "CX_SERVICE", "8-29-20021 20:21:02", "8-27-20021 20:21:02",
  "Alba",   "COMPLAIN", "8-30-20021 20:21:03", "8-28-20021 20:21:03",
  "Alex", "CX_SERVICE", "8-25-20021 21:21:05", "8-29-20021 20:21:04"
)

joined_df <- dplyr::full_join(df1, df2, by = "NAME")

solution <- joined_df %>% 
  group_by(NAME) %>% 
  select(-c(DATE_PURCHASE.y)) %>%
  top_n(n = 1, wt = DATE_PURCHASE.x) %>% 
  top_n(n = 1, wt = DATE_OF_CALL) %>% 
  rename("LAST_PRODUCT_PURCHASED" = "PRODUCT",
         "DATE_PURCHASE" = "DATE_PURCHASE.x")

solution
# A tibble: 5 x 6
# Groups:   NAME [5]
#  NAME  LAST_PRODUCT_PURCHASED AGENT DATE_PURCHASE     TYPE       DATE_OF_CALL       
#  <chr> <chr>                  <chr> <chr>               <chr>      <chr>              
#1 Karen M_14                   X_1   8-25-20021 18:21:28 COMPLAIN   8-26-20021 18:21:28
#2 Jean  M_64                   X_4   8-27-20021 20:21:59 CX_SERVICE 8-29-20021 20:21:59
#3 Keith M_57                   X_4   8-27-20021 20:21:02 CX_SERVICE 8-29-20021 20:21:02
#4 Alba  M_43                   X_3   8-29-20021 20:21:04 COMPLAIN   8-30-20021 20:21:03
#5 Alex  M_36                   X_2   8-25-20021 20:21:05 CX_SERVICE 8-25-20021 21:21:05
库(tidyverse)
df1%
top n(n=1,wt=通话日期)%>%
重命名(“上次购买的产品”=“产品”,
“购买日期”=“购买日期x”)
解决方案
#一个tibble:5x6
#分组:名称[5]
#姓名上次产品购买代理日期购买类型日期通话日期
#                                                         
#Karen M_14 X_18-25-20021 18:21:28抱怨8-26-20021 18:21:28
#2 Jean M_64 X_4 8-27-20021 20:21:59 CX_服务8-29-20021 20:21:59
#基思M_57 X_4 8-27-20021 20:21:02 CX_服务8-29-20021 20:21:02
#Alba M_43 X_3 8-29-20021 20:21:04投诉8-30-20021 20:21:03
#5 Alex M_36 X_2 8-25-20021 20:21:05 CX_服务8-25-20021:21:05

请使用易于复制的
dput
提供数据。Jared谢谢你的时间和努力,我不得不感谢你的帮助,我无法用语言来感谢你。多有才华的人啊!我想问你,你是否有时间向我解释一下它背后的思想过程,因为我看到你开始按名称分组,我可以理解,但你使用函数top\n,甚至更改了一些列名,请让我知道你在哪里编码的最后一个电话应该显示与最后购买,或者如果你可能太忙碌,你可以链接一些文档?非常感谢你,R_学生