2017-09-10 22 views
1

を集約し、リストを()の使用:R - 私は、このデータフレームを持つデータフレーム

> 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 

私は間違って何をしていますか?これを行うより良い方法があるかどうかをご提案ください。

答えて

4

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) 

我々最初group_by DATEおよびUSER(私は推測)、その後、あなたは、いくつかの装飾とCATEGORY内の各項目を貼り付けます。最後に、あなたは(ここでtibbleそれがdata.frameまま)あなたの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 

はこれが何をしたいですか?

+0

ありがとう、これは完璧です。しかし、私は 'paste0'関数の中でこの'崩壊 'がなくなっていることを知りました。これも仕事です。 – Arani

関連する問題