我不明白為什么從函式 parse_date_time 派生的時間不能被 lubridate() 中的另一個函式使用。這會生成一個 df,其中包含正確決議 am/pm 的日期。
dt2 <- data.frame('date_time' = c("11/24/19 06:00:00 PM",
"11/25/19 12:00:00 AM",
"11/25/19 06:00:00 AM",
"11/25/19 12:00:00 PM",
"11/25/19 06:00:00 PM",
"11/26/19 12:00:00 AM"),
'date' = c(1:6), 'time' = c(1:6)) %>%
mutate(date_time = parse_date_time(date_time, orders = "mdy IMS %p"),
date = date(date_time),
time = strftime(date_time,"%H:%M:%S", tz = "UTC"))
當我嘗試從小時列中提取小時時,出現錯誤:
dt2 <- dt2 %>% mutate(hour_from_hour = hour(time))
錯誤:mutate()列有問題hour_from_hour。我hour_from_hour = hour(time)。x 字串不是標準的明確格式
但是當我使用原始變數“date_time”時,它作業正常。
dt2 <- dt2 %>% mutate(hour_from_date_time = hour(date_time))
我的資料集有可變標題(有些是在日期時間,有些已經決議)。如果我可以在時間列上使用 hour() 就好了。
uj5u.com熱心網友回復:
R 沒有本地方式來處理與一天無關的時間。但是你可以使用像hms. 例如:
library(tidyverse)
library(lubridate)
library(hms)
dt2 <- data.frame('date_time' = c("11/24/19 06:00:00 PM",
"11/25/19 12:00:00 AM",
"11/25/19 06:00:00 AM",
"11/25/19 12:00:00 PM",
"11/25/19 06:00:00 PM",
"11/26/19 12:00:00 AM"),
'date' = c(1:6), 'time' = c(1:6)) %>%
mutate(date_time = parse_date_time(date_time, orders = "mdy IMS %p"),
date = date(date_time),
time = as_hms(date_time),
hour = hour(time))
但說實話,保留該date_time列并hour直接在其上使用可能會更好。
uj5u.com熱心網友回復:
如果我正確理解了您的問題,此代碼將回答它。它首先將小時的兩位數字提取為字串,然后將它們轉換為整數。該代碼假定前導零且沒有前導空格。如果要處理不同格式的情況,則需要編輯正則運算式。一旦找到要使用的函式,解決方案就相當簡單,但我認為這并非微不足道。
library(lubridate)
#>
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#>
#> date, intersect, setdiff, union
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library(stringr)
dt2 <- data.frame('date_time' = c("11/24/19 06:00:00 PM",
"11/25/19 12:00:00 AM",
"11/25/19 06:00:00 AM",
"11/25/19 12:00:00 PM",
"11/25/19 06:00:00 PM",
"11/26/19 12:00:00 AM"),
'date' = c(1:6), 'time' = c(1:6)) %>%
mutate(date_time = parse_date_time(date_time, orders = "mdy IMS %p"),
date = date(date_time),
time = strftime(date_time,"%H:%M:%S", tz = "UTC"))
# hour is of mode character, assuming that TZ is always UTC
dt2 <- dt2 %>% mutate(hour_from_hour = as.integer(str_extract(time, "^[0-2][0-9]")),
hour_from_date_time = hour(date_time))
identical(dt2$hour_from_hour, dt2$hour_from_date_time)
#> [1] TRUE
dt2
#> date_time date time hour_from_hour hour_from_date_time
#> 1 2019-11-24 18:00:00 2019-11-24 18:00:00 18 18
#> 2 2019-11-25 00:00:00 2019-11-25 00:00:00 0 0
#> 3 2019-11-25 06:00:00 2019-11-25 06:00:00 6 6
#> 4 2019-11-25 12:00:00 2019-11-25 12:00:00 12 12
#> 5 2019-11-25 18:00:00 2019-11-25 18:00:00 18 18
#> 6 2019-11-26 00:00:00 2019-11-26 00:00:00 0 0
由reprex 包(v2.0.1)于 2021 年 12 月 21 日創建
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/388503.html
