mercredi 9 janvier 2019

Transform repetitive ifelse statements into for loop

My goal is to create a new variable (QRT) based on the date ranges (2001-2019) of another variable. Initially, I had this ifelse statement:

IBES$QRT <- ifelse(IBES$FPEDATS >= "20170101" & IBES$FPEDATS <= "20170331", "2017Q1", IBES$QRT)

But rather than doing it for all years, I planned on having a for loop to take care of it.

for (i in 01:09) {
  for (j in 10:18) {
    for (k in 01) {
      for (l in 03) {
        for (m in 4) {
          for (n in 6) {
            for (o in 7) {
              for (p in 9) {
                for (q in 10) {
                  for (r in 12) {




IBES$QRT <- ifelse(IBES$FPEDATS >= "20[i][k]01" & IBES$FPEDATS <= "20[i][l]31", "20[i]Q1", IBES$QRT)
IBES$QRT <- ifelse(IBES$FPEDATS >= "20[i][m]01" & IBES$FPEDATS <= "20[i][n]31", "20[i]Q2", IBES$QRT)
IBES$QRT <- ifelse(IBES$FPEDATS >= "20[i][o]01" & IBES$FPEDATS <= "20[i][p]31", "20[i]Q3", IBES$QRT)
IBES$QRT <- ifelse(IBES$FPEDATS >= "20[i][q]01" & IBES$FPEDATS <= "20[i][r]31", "20[i]Q4", IBES$QRT)

IBES$QRT <- ifelse(IBES$FPEDATS >= "20[j][k]01" & IBES$FPEDATS <= "20[j][l]31", "20[j]Q1", IBES$QRT)
IBES$QRT <- ifelse(IBES$FPEDATS >= "20[j][m]01" & IBES$FPEDATS <= "20[j][n]31", "20[j]Q2", IBES$QRT)
IBES$QRT <- ifelse(IBES$FPEDATS >= "20[j][o]01" & IBES$FPEDATS <= "20[j][p]31", "20[j]Q3", IBES$QRT)
IBES$QRT <- ifelse(IBES$FPEDATS >= "20[j][q]01" & IBES$FPEDATS <= "20[j][r]31", "20[j]Q4", IBES$QRT)


    }
  }
    }
  }
          }
        }
      }
    }
  }
}

Aucun commentaire:

Enregistrer un commentaire