[英]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.frame
( tibble
這里,但依然是一種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.