【发布时间】:2020-11-23 19:57:24
【问题描述】:
我有一个数据框,记录了几年的月球开始时间和月球结束时间。我从这两列计算了月亮中间时间,并使用以下代码从月亮中间时间(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 吗?有人可以帮我解决这个问题吗?谢谢!
【问题讨论】:
-
你检查过润滑包吗?
-
我检查了 lubridate 包,但没有找到可以在我的数据框中使用的代码。我检查了 period()、as.period(),但我发现它不适合我的情况。我错过了什么吗?
-
您的时间格式看起来不正确,例如9:45。如果您在 R 控制台中编写它,它会生成一个从 9 到 45 的整数序列。调查哪种时间格式适合您的特定问题。建议,在 R 控制台中键入
help("DateTimeClasses")以阅读有关表示日期和时间的一些重要类的文档。 -
谢谢!我想到了!你是对的。我使用 lubridate 将 9:45 更改为“H M S”形式,并使用一些计算将时间重新编码为数字。
-
乐于助人。如果此答案解决了您的问题,请将以下标记为已接受。谢谢!
标签: r dataframe datetime time recode