如何将时间变量重新编码为 R 中的数字(数据帧)

How to recode time variable into number in R (dataframe)

我有一个数据框,记录了好几年的月亮开始时间和月亮结束时间。我从这两列计算出月亮中间时间,并使用以下代码从月亮中间时间 (mm) 中删除日期信息,只保留 hh:mm 格式。

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”。

我在 dplyr 中使用 case_when 重新编码我的时间变量:

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"))

#我的dataframe里有nas,因为总有一天没有月光

我不完全理解这个case_when代码:似乎“~”数字“”是我想重新编码成的,但是“~”之前的代码让我很困惑。最后,这段代码没有成功(当然)。当我更改“~”之前的部分时,我得到了不同的错误信息。

不知道是不是我的代码写错了,还是因为这个月中时间实际上包含了日期信息(尽管我删除了日期信息)所以无法重新编码为1-18。还有其他方法可以将我的时间重新编码为 1-18 吗?有人可以帮我吗?谢谢!

您的时间格式看起来不正确,例如9:45。如果您在 R 控制台中编写它,它会生成一个从 9 到 45 的整数序列。研究哪种时间格式适合您的特定问题。建议,在 R 控制台中键入 help("DateTimeClasses") 以阅读有关表示日期和时间的一些重要 类 的文档。