0

The for loop checks how many days a project was active during a month. I have a file containing two columns startdates of a project (Finance$Start WO) and end dates (Finance$Eind Wo). And to determine the number of days worked on a project, I use the 'bizdays' function and use:

ts_begin <- seq(ymd('2020-1-1'), ymd('2021-1-1'), '1 month')

Sample of start/ end dates:

Finance$`Start WO` <- c("2020-01-16", "2020-02-17", "2020-03-04")
Finance$`Eind Wo` <- c("2020-06-30", "2020-07-14" , "2020-12-31")


Dagen <- matrix(0, ncol = 12, nrow = 81)

    for (i in nrow(Finance)) {
      for (j in 2:13) {

     if (Finance$`Start WO`[i] > ts_begin[j-1] & Finance$`Start WO`[i] < ts_begin[j]) {
      Dagen[i,j-1] <- bizdays(ts_begin[j-1],ts_begin[j],cal) - bizdays(ts_begin[j-1],Finance$`Start WO`[i],cal)

       } else if (Finance$`Eind Wo`[i] > ts_begin[j-1] & Finance$`Eind Wo`[i] <= ts_begin[j]) {
     Dagen[i,j-1] <- bizdays(ts_begin[j-1], Finance$`Eind Wo`[i], cal)

      } else if (Finance$`Start WO`[i] < ts_begin[j-1] & Finance$`Eind Wo`[i] >= ts_begin [j]) {
      Dagen[i,j-1] <- bizdays(ts_begin[j-1], ts_begin[j], cal ) 

       } else {
    Dagen[i,j-1] <- 0
  }
}
}

I expected a 81 (=nrow(Finance) x 12 matrix as output, but received a 12 x 11 matrix. Can you please tell what's wrong?

Jaap
  • 55
  • 1
  • 2
  • 5
  • Hi, it would be better if you could post a sample of data. Read how to post a reproducible example: https://stackoverflow.com/help/minimal-reproducible-example, https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – missuse Apr 15 '20 at 09:24
  • Thanks for the feedback. I added a sample of starting and end dates – Jaap Apr 15 '20 at 09:42

1 Answers1

0

You want i to run from 1:nrow(Finance). I should work after this.

Finance$`Start WO` <- c("2020-01-16", "2020-02-17", "2020-03-04")
Finance$`Eind Wo` <- c("2020-06-30", "2020-07-14" , "2020-12-31")


Dagen <- matrix(0, ncol = 12, nrow = 81)

    for (i in 1:nrow(Finance)) {
      for (j in 2:13) {

     if (Finance$`Start WO`[i] > ts_begin[j-1] & Finance$`Start WO`[i] < ts_begin[j]) {
      Dagen[i,j-1] <- bizdays(ts_begin[j-1],ts_begin[j],cal) - bizdays(ts_begin[j-1],Finance$`Start WO`[i],cal)

       } else if (Finance$`Eind Wo`[i] > ts_begin[j-1] & Finance$`Eind Wo`[i] <= ts_begin[j]) {
     Dagen[i,j-1] <- bizdays(ts_begin[j-1], Finance$`Eind Wo`[i], cal)

      } else if (Finance$`Start WO`[i] < ts_begin[j-1] & Finance$`Eind Wo`[i] >= ts_begin [j]) {
      Dagen[i,j-1] <- bizdays(ts_begin[j-1], ts_begin[j], cal ) 

       } else {
    Dagen[i,j-1] <- 0
  }
}
}
Nico
  • 463
  • 5
  • 11