我有一張帶有日期和溫度的表格,我需要將日期從這種格式轉換1/1/2021 12:00:00 AM為1/1/21. 請幫忙。我嘗試使用此代碼添加具有新日期的新列
SFtemps$Date <- as.Date(strptime(SFtemps$Date, "%m/%d/%y %H:%M"))
但它不起作用。
uj5u.com熱心網友回復:
應該將%I小時表示為十進制數 (01-12),而不是%H,并且%y表示為沒有世紀的年份 (00-99)。
x <- "1/1/2021 12:00:00 AM"
format(strptime(x, "%m/%d/%Y %I:%M:%S %p"), "%m/%d/%y")
[1] "01/01/21"
請注意,重新格式化時間物件后,它將是一個純字串,并且會丟失時間物件的所有屬性。
uj5u.com熱心網友回復:
你的格式有點不對勁。這是兩個有效的選項(我最喜歡潤滑):
SFtemps <- list()
SFtemps$Date <- '1/1/2021 12:00:00 AM'
> as.Date(strptime(SFtemps$Date, "%m/%d/%Y %r"))
[1] "2021-01-01"
> as.Date(lubridate::mdy_hms(SFtemps$Date))
[1] "2021-01-01"
這會給你日期。如果您想將其視為 2021 年 1 月 1 日,請使用該format功能
uj5u.com熱心網友回復:
您的字串實際上是一個時間戳,使用lubridate您可以將其轉換為所需的格式,然后利用stamp函式以適合您的方式格式化您的資料。
org_str <- "1/1/2021 12:00:00 AM"
library("lubridate")
#>
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#>
#> date, intersect, setdiff, union
x <- mdy_hms(x = org_str, tz = "UTC")
sf <- stamp("29/01/1997")
#> Multiple formats matched: "%d/%Om/%Y"(1), "%d/%m/%Y"(1)
#> Using: "%d/%Om/%Y"
sf(x)
#> [1] "01/01/2021"
由reprex 包于 2022-04-22 創建(v2.0.1)
解釋
與普遍看法相反,日期沒有這樣的格式。只有日期的字串表示可以是特定格式。考慮以下示例。運行代碼:
x <- Sys.Date()
unclass(x)
將回傳一個整數。這是因為1:
因此,Date 類的物件在內部表示為數字。更具體地說,R 中的日期實際上是整數。
這同樣適用于 POSIX 物件
library(lubridate)
#>
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#>
#> date, intersect, setdiff, union
xn <- now()
class(xn)
#> [1] "POSIXct" "POSIXt"
unclass(xn)
#> [1] 1650644616
#> attr(,"tzone")
#> [1] ""
由reprex 包于 2022-04-22 創建(v2.0.1)
你總是可以運行:
format.Date(lubridate::now(), "%d-%m")
# [1] "22-04"
但是,這樣做不是格式化日期,而是創建日期/時間戳物件的字串表示形式。如果您想在常見的日期時間操作中使用它,則必須將您的字串表示形式轉換為時間戳/日期物件。
建議
每當使用日期時間/日期物件時,我認為最好將這些物件保留為正確的類,以維護相關細節(例如時間戳的時區),并且僅在使用分析/視覺表示中的資料時利用格式化功能,如示例所示。
1 日期和時間的要點
uj5u.com熱心網友回復:
你可以試試tryFormats
as.Date(x, format, tryFormats = c("%m/%d/%y, %H:%M"),
optional = FALSE)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/461746.html
