首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dplyr::group_by保留变量未分组

dplyr::group_by保留变量未分组
EN

Stack Overflow用户
提问于 2016-08-08 20:04:57
回答 1查看 319关注 0票数 1

我有一个数据库(user_reg),其中包含客户信息(customer_id)、他们的注册日期(reg_date2)和他们的订单日期(order_date2;每个客户通常大于1)。

我想知道1)第一个订单是什么时候发生的,然后2)最终得到一个具有唯一user_idreg_date2first_ordertbl

在执行下面的代码之后

代码语言:javascript
复制
  user_reg %>% select(user_id, reg_date2, order_date2) %>% 
  group_by(user_id) %>% 
  mutate(first_order=min(order_date2)) %>%
  select(user_id, reg_date2, first_order) %>%
  arrange(user_id) %>%
  group_by(user_id)

我仍然会在每个user_id中得到多行。

代码语言:javascript
复制
user_id  reg_date2 first_order
     <int>     <date>      <date>
1       -1 2015-11-03  2015-11-25
2        1 2013-10-24  2014-10-11
3        1 2013-10-24  2014-10-11
4        1 2013-10-24  2014-10-11
5        1 2013-10-24  2014-10-11
6        1 2013-10-24  2014-10-11

有什么办法解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-08 23:28:49

mutate函数将变量添加到现有的dataset中,因此最终的行数始终与开始时相同。

您可以添加distinct函数,使每个id只保留一个唯一行。要保留所有其他变量,您需要.keep_all参数。

代码语言:javascript
复制
... %>%
    group_by(user_id) %>% 
    mutate(first_order = min(order_date2)) %>%
    distinct(first_order, .keep_all = TRUE) 

对于每个id,从多行到单行通常是一种summarise,尽管这会删除其他变量。如果实际用例如此简单,则可以将额外的变量作为分组变量包括在内,因为每个user_idreg_date2似乎都是唯一的。

代码语言:javascript
复制
... %>%
    group_by(user_id, reg_date2) %>% 
    summarise(first_order = min(order_date2))

或者(但需要更多的输入),可以通过在summarise中包含reg_date2来保存它

代码语言:javascript
复制
... %>%
group_by(user_id) %>% 
    summarise(reg_date2 = unique(reg_date2), 
              first_order = min(order_date2))
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38828750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档