[英]dplyr::group_by leaves variables ungrouped
我有一個數據庫( 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
任何想法如何解決?
mutate
函數將變量添加到現有數據集中,因此您最終將始終獲得與開始時相同的行數。
您可以添加distinct
功能,以便每個ID僅保留一個唯一的行。 要保留所有其他變量,您需要.keep_all
參數。
... %>%
group_by(user_id) %>%
mutate(first_order = min(order_date2)) %>%
distinct(first_order, .keep_all = TRUE)
每個id從多行到單行通常是for 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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.