У меня есть датафрейм, похожий на этот
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 344479 obs. of 6 variables:
$ REGION : chr "NSW1" "NSW1" "NSW1" "NSW1" ...
$ SETTLEMENTDATE: POSIXct, format: "1998-12-07 02:00:00" "1998-12-07
02:30:00" "1998-12-07 03:00:00" "1998-12-07 03:30:00" ...
$ TOTALDEMAND : num 3294 5337 5296 5266 5330 ...
$ RRP : num 8.01 11.16 13.52 12.52 13.01 ...
$ PERIODTYPE : chr "TRADE" "TRADE" "TRADE" "TRADE" ...
$ month : num 12 12 12 12 12 12 12 12 12 12 ...
Я пытаюсь создать переменную year_quarter
, которая является строкой и имеет вид: 2014-Q1
(обозначает год / квартал) путем извлечения их из переменной SETTLEMENTDATE
.
Существует несколько способов решения этой проблемы с помощью zoo
или lubridate
, но я надеюсь, что кто-нибудь подскажет, почему моя функция не работает:
quarter_fun <- function(df){
df$quarter <- NA
if (df$month <= 3){
df$quarter <- paste(format(df$SETTLEMENTDATE, format = "%Y")[1],
"Q1", sep="-")
} else if (df$month >= 4 & df$month <= 6){
df$quarter <- paste( format(df$SETTLEMENTDATE, format = "%Y")[1],
"Q2", sep="-")
} else if (df$month >= 7 & df$month <= 9){
df$quarter <- paste(format(df$SETTLEMENTDATE, format = "%Y")[1],
"Q3", sep="-")
} else if (df$month == 10){
df$quarter <- paste(format(df$SETTLEMENTDATE, format = "%Y")[1],
"Q4", sep="-")
}
}
Я получаю это сообщение об ошибке:
the condition has length > 1 and only the first element will be usedthe
condition has length > 1 and only the first element will be usedthe
condition has length > 1 and only the first element will be usedthe
condition has length > 1 and only the first element will be used
Любая помощь будет принята с благодарностью - опять же, речь идет не о поиске решения стоящей перед нами задачи, а скорее о понимании того, почему моя попытка не работает, поскольку на моем конце явно есть ложное предположение (или несколько) по пути.
Спасибо!