簡體   English   中英

dplyr :: group_by使變量未分組

[英]dplyr::group_by leaves variables ungrouped

我有一個數據庫( user_reg ),其中包含客戶的信息( customer_id ),他們的注冊日期( reg_date2 )和他們的訂單日期( order_date2 ;通常每個客戶> 1)。

我想知道1)何時發生第一筆訂單,然后2)最后得到帶有唯一user_idreg_date2first_ordertbl

執行下面的代碼后

  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM