我有一個包含數十萬行的資料集。不知何故..資料提供者將其發送給我,所有日期都格式化為1/1/20202021 08:07:43 AM(mdy_hms)。正確的年份應該是每一行的最后四年。
lubridate::mdy_hms() 顯然無法識別這一點。所以我想弄清楚如何使用 grep 或類似方法來提取正確的日期時間。有任何想法嗎?
感謝大家 (:
uj5u.com熱心網友回復:
您可以使用包中的函式來處理這個問題stringr。首先,從日期變數中提取正確的年份。例如,
library(stringr)
date_value <- "1/1/20202021 08:07:43 AM"
correct_year <- str_sub(
str_extract(date_value, pattern = "\\d{8}\\s"), 5, 10
)
這回傳"2021 "。您現在可以使用str_replace()以下代碼替換 8 位數的壞年份correct_year:
str_replace(date_value, pattern = "\\d{8}\\s", replacement = correct_year)
[1] "1/1/2021 08:07:43 AM"
要在整個資料框中執行此操作,您可以執行以下操作:
library(tidyverse)
df %>%
mutate(
date_value = str_replace(
date_value,
pattern = "\\d{8}\\s",
replacement = str_sub(
str_extract(date_value, pattern = "\\d{8}\\s"), 5, 10
)
)
)
uj5u.com熱心網友回復:
您只能使用 提取第二個 4 位數年份sub。
x <- "1/1/20202021 08:07:43 AM"
lubridate::mdy_hms(sub('(\\d{4})(\\d{4})', '\\2', x))
#[1] "2021-01-01 08:07:43 UTC"
要將其應用于整個列,請替換x為df$column_name.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/429338.html
下一篇:將字串轉換為日期時間
