繁体   English   中英

如何将时间变量重新编码为 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"))

#我在数据框中有nas,因为有一天没有月光。

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

我不确定我的代码编写是否错误,或者由于这个月亮中间时间实际上包含日期信息(即使我删除了日期信息),所以它无法重新编码为 1-18。 还有其他方法可以将我的时间重新编码为 1-18 吗? 有人可以帮我解决这个问题吗? 谢谢!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM