2016-11-15 71 views
0

嘗試根據訂單日期列和電子郵件創建新的data_frame。因此,如果我有一個重複的電子郵件(例如下面的示例中的[email protected]),我想合併電子郵件並將order_date變量放在旁邊的新列中。我想在完整的DF中做到這一點。這將引入許多新手,但我稍後會解決這個問題。根據另一列拆分列(日期)(電子郵件)

我有一個數據幀如下:

Source: local data frame [6 x 4] 
Groups: email [5] 

       email order_date `sum(price_excl_vat_euro)` `sum(total_qty)` 
       <chr>  <date>      <dbl>   <int> 
1 [email protected] 2016-09-05      140.48    2 
2 [email protected] 2016-11-01      41.31    1 
3 [email protected] 2016-09-18      61.98    1 
4 [email protected] 2016-08-01      61.98    1 
5 [email protected] 2016-08-02      61.98    1 
6 [email protected] 2016-08-02      140.49    1 

我想獲得的(其它列,現在我不關心的):

email   order_date1 order_date2 
[email protected] 2016-09-05  NA 
[email protected] 2016-11-01  NA 
[email protected] 2016-09-18  NA 
[email protected] 2016-08-01  2016-08-02 
[email protected] 2016-08-02  NA 

這是要知道重要訂單數量可能會在1-10(平均)之間變化。我試過tidyr包中的spread函數。但無法實現它的工作。任何提示都非常感謝!

回答

3

例如

df <- read.table(row.names=1, stringsAsFactors = F, text=" 
1 [email protected] 2016-09-05      140.48    2 
2 [email protected] 2016-11-01      41.31    1 
3 [email protected] 2016-09-18      61.98    1 
4 [email protected] 2016-08-01      61.98    1 
5 [email protected] 2016-08-02      61.98    1 
6 [email protected] 2016-08-02      140.49    1") 
df <- df[order(df[,1], df[,2]), ] 
lst <- split(df[,2],df[,1]) 
do.call(rbind, lapply(lst, "length<-", max(lengths(lst)))) 
#     [,1]   [,2]   
# [email protected] "2016-08-01" "2016-08-02" 
# [email protected] "2016-08-02" NA   
# [email protected] "2016-11-01" NA   
# [email protected] "2016-09-05" NA   
# [email protected] "2016-09-18" NA  

library(tidyverse) 
df %>% 
    arrange(V2, V3) %>% 
    group_by(V2) %>% 
    transmute(V3, date=paste0("date", 1:n())) %>% 
    spread(date, V3) 
# Source: local data frame [5 x 3] 
# Groups: V2 [5] 
# 
#    V2  date1  date2 
# *   <chr>  <chr>  <chr> 
# 1 [email protected] 2016-08-01 2016-08-02 
# 2 [email protected] 2016-08-02  <NA> 
# 3 [email protected] 2016-11-01  <NA> 
# 4 [email protected] 2016-09-05  <NA> 
# 5 [email protected] 2016-09-18  <NA> 
+0

由於這個工程確實如此。你能否告訴我我可以如何保留其他專欄?猜猜添加他們來安排應該做的工作。 –

+0

總結併合並它們之後(例如)。或者:發佈一個新問題並指定確切的期望輸出(我不知道) – lukeA

+0

將它們分開後,我有一個命令讓我們說2次。因此,該用戶的電子郵件顯示爲2行,其中order_date填充在第一行date1和第二行date2中。如果我有多個訂單,它會繼續排第3行。基本上我想要將這些列合併到基於transaction_ids的1.中 –