簡體   English   中英

< R > 根據 R 中的日期和事件對列的元素求和

[英]< R > Sum elements of a column, based on dates and events in R

我正在嘗試計算機器中不同部件的壽命(以小時為單位)。 為此,我有以下信息:

  • 日期。
  • 工作時間:機器運行的小時數。
  • 替換:(1 或 0)指定是否發生替換。
  • 更換件:件 X 或 Y(這台機器有不同的件)。

示例數據集:

set.seed(89)
hoursWorked <- floor(runif(122, min=1, max=16))
Replacement <- floor(runif(122, min=0, max=2))

dt<- as.data.frame(cbind(hoursWorked, Replacement)) %>%
  mutate(PieceReplaced= ifelse(Replacement==1,cbind(c("X", "Y")) ,NA), 
         datesample=seq(as.Date("2020-01-01"), as.Date("2020-05-01"), by="days"))%>%
  select(datesample, everything())

因此,我想總結自上次更換特定部件以來機器的運行時間。 結果將如下所示:

dt$averagetime[1:10] <- c(0,0,2+14, NA, 13+12, 14+12+13+15, 15+12, NA, NA, NA)

這些部件計划在一天開始時更換,因此更換日的工作時間包括在下一次更換中

我非常感謝我在一段時間內一直被這個問題所困擾的幫助。 謝謝!!!

繼續tidyverse ,您可以嘗試以下方法。

首先,使用mutatecumsum計算每天的累計小時數。 在此之前不會使用group_by ,因為它包括每天記錄的所有時間,與片斷更換無關。

然后,您可以按PieceReplaced分組,並使用每件作品的累積小時數差異。

這提供了與建議的 output 相似的結果,除了第一個 Y 件可以考慮至少 2 小時,在該點之前的時間未知。

dt <- as.data.frame(cbind(hoursWorked, Replacement)) %>%
  mutate(PieceReplaced= ifelse(Replacement==1,cbind(c("X", "Y")) ,NA), 
         datesample=seq(as.Date("2020-01-01"), as.Date("2020-05-01"), by="days"))%>%
  select(datesample, everything()) %>%
  mutate(CumHours = lag(cumsum(hoursWorked), default = 0)) %>%
  group_by(PieceReplaced) %>%
  mutate(TimeSinceReplaced = ifelse(Replacement == 1, CumHours - lag(CumHours, default = 0), NA))

Output

# A tibble: 122 x 6
# Groups:   PieceReplaced [3]
    datesample hoursWorked Replacement PieceReplaced CumHours TimeSinceReplaced
    <date>           <dbl>       <dbl> <chr>            <dbl>             <dbl>
  1 2020-01-01           2           1 X                    0                 0
  2 2020-01-02          14           1 Y                    2                 2
  3 2020-01-03          12           1 X                   16                16
  4 2020-01-04          13           0 NA                  28                NA
  5 2020-01-05          15           1 X                   41                25
  6 2020-01-06          12           1 Y                   56                54
  7 2020-01-07           4           1 X                   68                27
  8 2020-01-08           1           0 NA                  72                NA
  9 2020-01-09          15           0 NA                  73                NA
 10 2020-01-10           4           0 NA                  88                NA
 11 2020-01-11           2           0 NA                  92                NA
 12 2020-01-12           8           0 NA                  94                NA

暫無
暫無

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

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