簡體   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