У меня есть фрейм данных, в котором записано время начала луны и время окончания луны за несколько лет. Я вычислил среднее время луны из этих двух столбцов и использовал следующий код, чтобы удалить информацию о дате из среднего времени луны (мм), оставив только формат чч: мм.
diel$mm <- as.POSIXct((as.numeric(diel$`moonend date time`) + as.numeric(diel$`moonstart date time`)) / 2, origin = '1970-01-01')
#mm=moonlight midpoint
diel$mm <-strftime(diel$mm, tz = "UCT", format = "%H:%M")
#delete the date info on the moonlight midpoint column
Затем Я хотел перекодировать среднее время моей Луны в числа 1-18. Мои 24 часа разделены с 9:45 до 9:45 следующего дня. и я кодирую каждые 80 минут в один временной интервал, например, с 9:45 до 11:05 кодируется "1", с 11:05 до 12:25 кодируется "2", ...., от 8:25 до 9:45 кодируется как «18».
Я использовал case_when в dplyr, чтобы перекодировать мою переменную времени:
diel <- diel %>% mutate(mm = case_when(
mm > 9:45 & mm < 11:05 ~ "1",
mm > 11:05 & mm < 12:25 ~ "2",
mm > 12:25 & mm < 13:45 ~ "3",
mm > 13:45 & mm < 15:05 ~ "4",
mm > 15:05 & mm < 16:25 ~ "5",
mm > 16:25 & mm < 17:45 ~ "6",
mm >17:45 & mm < 19:05 ~ "7",
mm > 19:05 & mm < 20:25 ~ "8",
mm > 20:25 & mm < 21:45 ~ "9",
mm > 21:45 & mm < 23:05 ~ "10",
mm > 23:05 & mm < 0:25 ~ "11",
mm > 0:25 & mm < 1:45 ~ "12",
mm > 1:45 & mm < 3:05 ~ "13",
mm > 3:05 & mm < 4:25 ~ "14",
mm > 4:25 & mm < 5:45 ~ "15",
mm > 5:45 & mm < 7:05 ~ "16",
mm > 7:05 & mm < 8:25 ~ "17",
mm > 8:25 & mm < 9:45 ~ "18",
is.na(mm) ~ "na"))
# У меня есть nas в кадре данных, потому что есть один день, нет лунного света.
Я не совсем понимаю этот код case_when: кажется, "~" number "" - это то, что я хочу перекодировать, но код перед "~" меня сильно сбивает. В конце концов, этот код не сработал (конечно). Поскольку я изменил часть перед знаком «~», у меня появились другие сообщения об ошибках.
Я не уверен, что мой код написан неправильно, или поскольку это среднее время луны на самом деле содержит информацию о дате (хотя я удалил дату info), поэтому его нельзя было перекодировать в 1-18. Есть ли другие способы перекодировать время в 1-18? Может ли кто-нибудь помочь мне с этим? Спасибо!