簡體   English   中英

R中按周和按乘積設置的匯總/總計數據

[英]Aggregate/Sum data set by week and by product in R

我有一個非常大的數據集,我想按周/月和按產品(數千個)進行匯總。 有沒有一種方法可以處理以下格式的數據集?

Date           product product2 product3
03/03/2011       1        0        7
04/08/2011       3        8        2
03/05/2015       6        3       89
03/01/2017       1        0        2
03/03/2017       6        1        6

這將產生以下結果:

Date           product product2 product3
wk1-032011       1        0        7
wk2-042011       3        8        2
wk1-032015       6        3       89
wk1-032017       7        1        8


df <- structure(list(Date = c("03/03/2011", "04/04/2011", "03/05/2015", "03/01/2017", "03/03/2017"),
             product= c(1L, 3L, 6L, 1L, 6L),
             product2= c(0L, 8L, 3L, 0L, 1L), 
             product3= c(7L, 2L, 89L, 2L, 6L)), 
             .Names= c("Date", "product", "product2", "product3"), 
             class= "data.frame", row.names=c(NA, -5L))

在基數R中,可以使用as.Date將字符df $ Date轉換為Date變量,然后以正確的格式使用format to將日期轉換為指示每周日期的字符變量。 然后,通過新變量,使用aggregate來執行聚合。

aggregate(df[2:4], list("weeks"=format(as.Date(df$Date, "%m/%d/%Y"), "%Y-%W")), FUN=sum)
    weeks product product2 product3
1 2011-09       1        0        7
2 2011-14       3        8        2
3 2015-09       6        3       89
4 2017-09       7        1        8

有關其他日期轉換,請參見?strptime


正如@akrun在評論中所提到的,與上面的基本R代碼類似的data.table

library(data.table)
setDT(df)[, lapply(.SD, sum),
          by=.(weeks = format(as.IDate(Date, "%m/%d/%Y"), "%Y-%W"))]

在這里, setDT將data.frame轉換為data.table, lapply...計算總和,其中.SD代表data.table。 該總和由被從所產生的每個獨特的元素計算format(as.IDate(Date, "%m/%d/%Y"), "%Y-%W")其中所述轉換使用data.table的as.IDate代替基本R as.Date

暫無
暫無

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

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