Как перекодировать временную переменную в число в R (фрейм данных) - PullRequest
1 голос
/ 03 августа 2020

У меня есть фрейм данных, в котором записано время начала луны и время окончания луны за несколько лет. Я вычислил среднее время луны из этих двух столбцов и использовал следующий код, чтобы удалить информацию о дате из среднего времени луны (мм), оставив только формат чч: мм.

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? Может ли кто-нибудь помочь мне с этим? Спасибо!

1 Ответ

0 голосов
/ 05 августа 2020

У вас неправильный формат времени, например, 9:45. Если вы напишете это в консоли R, она выдаст последовательность целых чисел от 9 до 45. Узнайте, какой формат времени подходит для вашей конкретной проблемы. Предложение, введите help ("DateTimeClasses") в консоли R, чтобы прочитать документацию по некоторым важным классам, представляющим дату и время.

...