Когда данные временного ряда смещены и неполны - PullRequest
0 голосов
/ 12 ноября 2018

Новый клиент на работе имеет финансовый календарь, который начинается в марте и заканчивается в феврале следующего года:

fiscalMonthLabels <- c("March", "April", "May", "June", 
  "July", "August", "September", "October", 
  "November", "December", "January", "February")

Но поскольку они новые, у нас есть данные за несколько месяцев:

library(lubridate)
rawDate <- c("2018-09-01", "2018-10-01", "2018-11-01")
actualMonth <- month(rawDate)
newMonth <- rep(0, length(actualMonth))
for (i in 1:length(actualMonth)) {
  if (actualMonth[i] == 1) {newMonth[i] <- 11} 
  else if (actualMonth[i] == 2) {newMonth[i] <- 12} 
  else {newMonth[i] <- actualMonth[i] - 2}
}
revenue <- c(123, 456, 789)

df <- data.frame(rawDate, actualMonth, newMonth, revenue)
df
     rawDate actualMonth newMonth revenue
1 2018-09-01           9        7     123
2 2018-10-01          10        8     456
3 2018-11-01          11        9     789

Поэтому, когда я пытаюсь создать новый фактор с финансовым месяцем, я получаю следующую ошибку:

fiscalMonth <- factor(newMonth, labels = fiscalMonthLabels)

Error in factor(newMonth, labels = fiscalMonthLabels) : 
    invalid 'labels'; length 12 should be 1 or 3

Кажется, что команда factor ищет в actualMonth все двенадцать возможных значений. Как мне обойти эту проблему?

1 Ответ

0 голосов
/ 12 ноября 2018

Вы также захотите присвоить levels:

fiscalMonth <- factor(actualMonth, levels = 1:12, labels = fiscalMonthLabels)
fiscalMonth
[1] November December January 
Levels: March April May June July August September October November December January February

В качестве альтернативы, поскольку вы используете lubridate::month, вы можете просто передать аргумент метки в месяц, который вернетупорядоченный коэффициент:

fiscalMonth <- month(actualMonth, label = TRUE)
[1] Sep Oct Nov
Levels: Jan < Feb < Mar < Apr < May < Jun < Jul < Aug < Sep < Oct < Nov < Dec
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...