gpt4 book ai didi

r - 如何在数据表中插入新旧日期之间所有缺失的周数以计算每周库存 R

转载 作者:行者123 更新时间:2023-12-02 02:48:15 24 4
gpt4 key购买 nike

所以我有一个包含 ID DATE 和 STOCK 列的数据表 df

在此表中,同一个 ID 具有多个值及其日期和库存:

ID        DATE        STOCK
a1 2017-05-04 1
a1 2017-06-04 4
a1 2017-06-05 1
a1 2018-05-04 1
a1 2018-06-04 3
a1 2018-06-05 1
a2 2016-11-26 2
a2 ... ..

使用 lubridate 我可以获得日期是哪一周,如下所示:

dfWeeks=df[,"WEEK" := floor_date(df$`Date`, "week")]

ID DATE STOCK WEEK
a1 2017-05-04 1 2017-04-30
a1 2017-06-04 4 2017-06-04
a1 2017-06-05 1 2017-06-04
a1 2018-05-04 1 2018-04-29
a1 2018-06-04 3 2018-06-03
a1 2018-06-05 1 2018-06-03
a2 2016-11-26 2 2016-11-20
a2 ... ..

所以从 DATE 列我知道我的旧日期是 2017-05-04和最新日期 2018-06-05 ,大约有 56.71429 周:

dates <- c( "2017-05-04","2018-06-05")
dif <- diff(as.numeric(strptime(dates, format = "%Y-%m-%d")))/(60 * 60 * 24 * 7)

我的表只有 4 个独特的周,所以我的想法是对每周的库存求和,并插入缺失的(57-4=53 周)库存值为 0 的周。

然后我可以像这样计算所有周的平均值

meanStock<- dfWeeks[, .(mean=sum(Stock, na.rm = T)/dif <- diff(as.numeric(strptime(c(min(Date), max(Date)), format = "%Y-%m-%d")))/(60 * 60 * 24 * 7) ), by = .(ID)]

但我不知道它是否会起作用,希望我说清楚了,欢迎任何建议或方法。

更新:

这是我获取最大和最小日期的方式

max = aggregate(df$`Date`,by=list(df$ID),max)
colnames(max) = c("ID", "MAX")
min = aggregate(df$`Date`,by=list(df$ID),min)
colnames(min) = c("ID", "MIN")
test <- merge(max, min, by="ID", all=T)

最佳答案

类似于:

library(data.table)

setDT(df)[, DATE := as.Date(DATE)][, `:=` (st = min(DATE), end = max(DATE) + 7), by = ID][
, .(ID = ID, DATE = DATE, STOCK = STOCK, Expanded = seq(st, end, by = "week")), by = 1:nrow(df)][
, `:=` (WEEK = floor_date(Expanded, "week"), WEEK2 = floor_date(DATE, "week"))][
WEEK != WEEK2, STOCK := 0][
, .(SUM_STOCK = sum(STOCK)), by = .(WEEK, ID)]

输出(2017-04-022017-06-11ID a1 周的行):

          WEEK ID SUM_STOCK
1: 2017-04-02 a1 0
2: 2017-04-09 a1 0
3: 2017-04-16 a1 0
4: 2017-04-23 a1 0
5: 2017-04-30 a1 1
6: 2017-05-07 a1 0
7: 2017-05-14 a1 0
8: 2017-05-21 a1 0
9: 2017-05-28 a1 0
10: 2017-06-04 a1 5
11: 2017-06-11 a1 0

关于r - 如何在数据表中插入新旧日期之间所有缺失的周数以计算每周库存 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53396993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com