我有一個包含超過 200 萬個 obs 的龐大資料集,并且所有列的類都是字符型別。我需要將其中一個轉換為日期格式 dd/mm/yyyy,但日期是這樣寫的:
dates <- c("2022-04-08", "26/01/2021", "14/07/2021", "2021-12-27")
我已經嘗試了一些我在其他帖子中找到的解釋,但它們似乎都不適合我。一組日期總是變成 NA。
uj5u.com熱心網友回復:
您可以執行以下操作:
format_ymd <- as.Date(dates, format = "%Y-%m-%d")
format_dmy <- as.Date(dates, format = "%d/%m/%Y")
as.Date(ifelse(is.na(format_ymd), format_dmy, format_ymd), origin = "1970-01-01")
# [1] "2022-04-08" "2021-01-26" "2021-07-14" "2021-12-27"
uj5u.com熱心網友回復:
類似于 SamR 的方法
data.table::fifelse(
grepl("^\\d{4}", dates),
as.Date(dates,"%Y-%m-%d"),
as.Date(dates, "%d/%m/%Y")
)
uj5u.com熱心網友回復:
1) Base R Use as.Date 與所示的格式向量。不使用任何包。
as.Date(dates, format = ifelse(grepl("/", dates), "%d/%m/%Y", "%Y-%m-%d"))
## [1] "2022-04-08" "2021-01-26" "2021-07-14" "2021-12-27"
2) Base R - 2另一種方法是將 dd/mm/yyyy 轉換為 yyyy-mm-dd 然后使用 as.Date。不使用任何包。
as.Date(sub("(..)/(..)/(....)", "\\3-\\2-\\1", dates))
## [1] "2022-04-08" "2021-01-26" "2021-07-14" "2021-12-27"
3) lubridate 使用 lubridate 使用 parse_date_time 然后將其轉換為 Date 類。
library(lubridate)
as.Date(parse_date_time(dates, c("ymd", "dmy")))
## [1] "2022-04-08" "2021-01-26" "2021-07-14" "2021-12-27"
4)coalesce 我們可以在dplyr中使用coalesce。它需要它找到的第一個非 NA。
library(dplyr)
coalesce(as.Date(dates), as.Date(dates, "%d/%m/%Y"))
## [1] "2022-04-08" "2021-01-26" "2021-07-14" "2021-12-27"
uj5u.com熱心網友回復:
使用時鐘包,您可以提供多個formats date_parse(),它會按順序嘗試它們。對于像這種格式完全不同的情況來說,這很好。
library(clock)
dates <- c("2022-04-08", "26/01/2021", "14/07/2021", "2021-12-27")
# Tries each `format` in order. Stops on first success.
date_parse(
dates,
format = c("%Y-%m-%d", "%d/%m/%Y")
)
#> [1] "2022-04-08" "2021-01-26" "2021-07-14" "2021-12-27"
由reprex 包于 2022-04-12 創建(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/461671.html
上一篇:當sqlite中的列是日期時間時,如何查詢當前日期的所有資料?
下一篇:一篇關于c語言的大補帖
