我有一个包含客户的数据库(user_reg
)'信息(customer_id
),其注册日期(reg_date2
)和订单日期(order_date2
;通常>每位客户1)。
我想知道
1)当第一个订单发生时然后
2)最后得到tbl
个user_id
,reg_date2
和first_order
。
执行以下代码后
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
任何想法如何解决?
答案 0 :(得分:4)
mutate
函数会将变量添加到现有数据集中,因此您始终会以相同的行数开始。
您可以添加distinct
函数,以便每个ID只保留一个唯一的行。要保留所有其他变量,您需要.keep_all
参数。
... %>%
group_by(user_id) %>%
mutate(first_order = min(order_date2)) %>%
distinct(first_order, .keep_all = TRUE)
每个id从多行转到一行通常是summarise
,尽管这会丢弃其他变量。如果真实用例如此简单,则可以将附加变量作为分组变量包含在内,因为reg_date2
似乎每user_id
都是唯一的。
... %>%
group_by(user_id, reg_date2) %>%
summarise(first_order = min(order_date2))
或者(但更多打字),保留reg_date2
可以通过将其包含在summarise
中来完成:
... %>%
group_by(user_id) %>%
summarise(reg_date2 = unique(reg_date2),
first_order = min(order_date2))