我有一個電子表格,其中一列中有日期和 12 小時時間,另一列指定 AM/PM。如何組合這些檔案以便可以將它們用作 POSIXct/POSIXlt/POSIXt 物件?
電子表格的時間列為 DAY/MONTH/YEAR HOUR:MINUTE
而小時是從簽到時間名冊中的 12 小時格式。另一列只是說上午或下午。我正在嘗試組合這些列,然后將它們轉換為 24 小時制并將其用作 POSIXt 物件。
我看到的例子:
| 時間表 | 上午下午 |
|---|---|
| 2022 年 8 月 10 日 9:00 | 是 |
| 2022 年 8 月 10 日 9:01 | 是 |
這一直持續到下午 5:00(同一天)
到目前為止我已經嘗試過:
Timesheet %>%
unite("timestamp_24", c("timestamp_12","am_pm"),na.rm=FALSE)%>%
mutate(timestamp=(as.POSIXct(timestamp, format = "%d-%m-%Y %H:%M"))
這不起作用,因為當它們組合時它給出: Timestamp_24 DAY/MONTH/YEAR HOUR:MINUTE_AM 我認為這是問題的癥結,因為那時as.POSIXct無法閱讀它。
uj5u.com熱心網友回復:
這是我的解決方案。該方法只是提取小時,如果它是 PM,則 12,然后使用 as.POSXct 正確格式化(如果您的資料框出現在您的示例中,您需要使用/而不是-在引數中)。format我已經這樣做了,stringr::str_replace()它允許您為replace引數設定一個函式。
Timesheet <- data.frame(
time = c("8/10/2022 9:00", "8/10/2022 9:01"),
am_pm = c("AM", "PM")
)
Timesheet %>%
mutate(
time_24hr = stringr::str_replace(
time,
".(?=:..$)",
function(x) ifelse(am_pm == "PM", as.numeric(x) 12, x)
),
time_24hr = as.POSIXct(time_24hr, format = "%d/%m/%Y %H:%M")
)
這是結果:
time am_pm time_24hr
1 8/10/2022 9:00 AM 2022-10-08 09:00:00
2 8/10/2022 9:01 PM 2022-10-08 21:01:00
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/531254.html
標籤:r数据争吵
上一篇:如何從幾列將類別更改為虛擬變數
下一篇:使用dplyr計算多點距離矩陣
