R语言 如何基于多个变量测量从一个状态到下一个状态所需的时间

odopli94  于 2023-05-04  发布在  其他
关注(0)|答案(1)|浏览(119)

我有生产数据,有38种不同的状态,范围从0 - 5000,i。e 3000、3100、3500。与每个状态沿着的是状态日期、型号和收货地点。
我需要计算出,平均而言,一个项目从状态3000到5000(已交付)需要多长时间,假设它是项目M到目的地X。不仅仅是状态3000到4000,而是所有37种不同的状态(在交付之前),这样我就可以建立一个预测模型来预测未来的交付时间。
数据集:
| ID|状态|状态日期“%m/%d/%Y”|型号|运输至地点|
| --------------|--------------|--------------|--------------|--------------|
| ABC123|三千|2023年1月1日|M|X|
| ABC123|五千|2023年1月5日|M|X|
| ABC124|二千年|2022年10月5日|N|Y轴|
| ABC124|五千|2022年5月15日|N|Y轴|
ABC124 2500 12/10/2023 M X
这就是我想要的结果:
| 状态|型号|运输至地点|达到状态所需天数5000|
| --------------|--------------|--------------|--------------|
| 三千|M|X|二十|
| 三千一百|M|X|十五岁|
| 三千三百|N|Y轴|10个|
| 小行星3400|N|Y轴|五|

ndh0cuux

ndh0cuux1#

试试这个:

library(dplyr)
quux %>%
  mutate(Status.Date = as.Date(Status.Date, format = "%m/%d/%Y")) %>%
  group_by(ID) %>%
  mutate(
    time_to_5000 =
      if (5000 %in% Status) Status.Date[Status==5000][1] - Status.Date else NA
  ) %>%
  ungroup()
# # A tibble: 5 × 6
#   ID     Status Status.Date Model Ship.to.Location time_to_5000
#   <chr>   <dbl> <date>      <chr> <chr>            <drtn>      
# 1 ABC123   3000 2023-01-01  M     X                14 days     
# 2 ABC123   3100 2023-01-10  M     X                 5 days     
# 3 ABC124   2000 2023-11-01  N     Y                NA days     
# 4 ABC124   2500 2023-12-10  N     Y                NA days     
# 5 ABC123   5000 2023-01-15  M     X                 0 days

从技术上讲,我们不需要if语句。也就是说,这也起作用:

... %>%
  mutate(time_to_5000 = Status.Date[Status==5000][1] - Status.Date) %>%
  ...

我把它包括在上面,因为我不确定它是否有意义有多个条件(e。例如,both 3000/5000必须存在),以便返回非NA值。有很多方法可以实现这个逻辑。
数据(增加到至少包括一个5000):

quux <- structure(list(ID = c("ABC123", "ABC123", "ABC124", "ABC124", "ABC123"), Status = c(3000, 3100, 2000, 2500, 5000), Status.Date = c("1/1/2023", "1/10/2023", "11/1/2023", "12/10/2023", "1/15/2023"), Model = c("M", "M", "N", "N", "M"), Ship.to.Location = c("X", "X", "Y", "Y", "X")), row.names = c(NA, -5L), class = "data.frame")

相关问题