我有一个数据库(user_reg),其中包含客户信息(customer_id)、他们的注册日期(reg_date2)和他们的订单日期(order_date2;每个客户通常大于1)。
我想知道1)第一个订单是什么时候发生的,然后2)最终得到一个具有唯一user_id、reg_date2和first_order的tbl。
在执行下面的代码之后
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中得到多行。
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有什么办法解决这个问题吗?
发布于 2016-08-08 23:28:49
mutate函数将变量添加到现有的dataset中,因此最终的行数始终与开始时相同。
您可以添加distinct函数,使每个id只保留一个唯一行。要保留所有其他变量,您需要.keep_all参数。
... %>%
group_by(user_id) %>%
mutate(first_order = min(order_date2)) %>%
distinct(first_order, .keep_all = TRUE) 对于每个id,从多行到单行通常是一种summarise,尽管这会删除其他变量。如果实际用例如此简单,则可以将额外的变量作为分组变量包括在内,因为每个user_id的reg_date2似乎都是唯一的。
... %>%
group_by(user_id, reg_date2) %>%
summarise(first_order = min(order_date2))或者(但需要更多的输入),可以通过在summarise中包含reg_date2来保存它
... %>%
group_by(user_id) %>%
summarise(reg_date2 = unique(reg_date2),
first_order = min(order_date2))https://stackoverflow.com/questions/38828750
复制相似问题