簡體   English   中英

R-使用list()聚合數據幀

[英]R - Using list() to aggregate data frame

我有這個數據框:

> head(DF, 10)
         DATE    USER    CATEGORY     QTY
1  2017-09-04     A79 Footwear       2167
2  2017-08-31     A41 Accessories     342
3  2017-08-27     A34 Accessories     828
4  2017-08-22     A68 Accessories    1292
5  2017-08-23     A68 Accessories    1297
6  2017-08-23     A68 Footwear       1944
7  2017-08-25     A68 Accessories      60
8  2017-08-25     A68 Footwear          5
9  2017-08-25     A68 Apparel        2454
10 2017-08-29     A68 Accessories    2521

我想要的是:

> head(DF1, 10)
         DATE    USER                               CATEGORIES   QTY_SUM
1  2017-09-04     A79 Footwear                                      2167
2  2017-08-31     A41 Accessories                                    342
3  2017-08-27     A34 Accessories                                    828
4  2017-08-22     A68 Accessories                                   1292
5  2017-08-23     A68 Accessories-1297, Footwear-1944               3241
6  2017-08-25     A68 Accessories-60, Footwear-5, Apparel-2454      2519
7  2017-08-29     A68 Accessories                                   2521

我嘗試使用aggregate ,但效果不佳。 我認為這可能與以下類似:

DF1 <- data.table(DF, key=c('DATE', 'USER_ID'))
DF1 <- DF1[, list(CATEGORIES=paste0(CATEGORY, "-", QTY), QTY=sum(QTY)), by=c('DATE', 'USER_ID')]
> head(x, 10) #getting this
         DATE    USER         CATEGORY     QTY
1  2017-09-04     A79 Footwear-2167       2167
2  2017-08-31     A41 Accessories-342      342
3  2017-08-27     A34 Accessories-828      828
4  2017-08-22     A68 Accessories-1292    1292
5  2017-08-23     A68 Accessories-1297    1297
6  2017-08-23     A68 Footwear-1944       1944
7  2017-08-25     A68 Accessories-60        60
8  2017-08-25     A68 Footwear-5             5
9  2017-08-25     A68 Apparel-2454        2454
10 2017-08-29     A68 Accessories         2521

我究竟做錯了什么? 請提出是否有更好的方法來做到這一點。

使用dplyr, ,您可以:

df <- read.table(text="
DATE    USER    CATEGORY     QTY
1  2017-09-04     A79 Footwear       2167
2  2017-08-31     A41 Accessories     342
3  2017-08-27     A34 Accessories     828
4  2017-08-22     A68 Accessories    1292
5  2017-08-23     A68 Accessories    1297
6  2017-08-23     A68 Footwear       1944
7  2017-08-25     A68 Accessories      60
8  2017-08-25     A68 Footwear          5
9  2017-08-25     A68 Apparel        2454
10 2017-08-29     A68 Accessories    2521")

library(dplyr)

我們首先通過DATE和USER(我想)進行group_by ,然后將每個項目粘貼到CATEGORY中並進行修飾。 最后,取消組合您的data.frametibble這里,但依然是一種data.frame ):

df %>% 
  group_by(DATE, USER) %>% 
  summarise(CATEGORIES=paste(CATEGORY, QTY, sep="-", collapse=","),
            QTY_SUM=sum(QTY)) %>% 
  ungroup()

# A tibble: 7 x 4
DATE   USER                             CATEGORIES QTY_SUM
<fctr> <fctr>                                  <chr>   <int>
  1 2017-08-22    A68                       Accessories-1292    1292
2 2017-08-23    A68         Accessories-1297,Footwear-1944    3241
3 2017-08-25    A68 Accessories-60,Footwear-5,Apparel-2454    2519
4 2017-08-27    A34                        Accessories-828     828
5 2017-08-29    A68                       Accessories-2521    2521
6 2017-08-31    A41                        Accessories-342     342
7 2017-09-04    A79                          Footwear-2167    2167

這是你想要的嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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