readr包有一個函式parse_number,它回傳 a 中的數字string:
readr::parse_number("Hello 2022!")
[1] 2022
是否有類似的方法可以從 a 回傳日期string?該readr有一個呼叫的函式parse_date,但它確實不同的東西:
readr::parse_date("X2018-01-11_poland")
Warning: 1 parsing failure.
row col expected actual
1 -- date like X2018-01-11_poland
[1] NA
期望的輸出:
# the raw string is "X2018-01-11_poland"
2018-01-11
PS我對用正則運算式做這件事不感興趣。
uj5u.com熱心網友回復:
該lubridate軟體包具有parse_date_time2易于使用的功能。
library(lubridate)
dstring <- "X2018-01-11_poland"
date <- parse_date_time2(dstring, orders='Ymd')
date
#[1] "2018-01-11 UTC"
uj5u.com熱心網友回復:
這是一個無正則運算式的想法,
parse_date(strsplit(x, '_', fixed = TRUE)[[1]][1], format = 'X%Y-%m-%d')
#[1] "2018-01-11"
但是,如果波蘭部分也已修復,則可以再次執行,
parse_date(x, format = 'X%Y-%m-%d_poland')
#[1] "2018-01-11"
uj5u.com熱心網友回復:
1)這僅使用基礎 R,不使用任何正則運算式。它假定 (1) 日期前只有字母和空格,就像問題中的情況一樣,但如有必要,可以通過向 let 添加其他字符輕松放寬,以及 (2) 日期采用標準日期格式. chartr 將其第一個引數中的第 i 個字符轉換為其第二個引數中的第 i 個字符,并用空格替換每個字母。然后使用 as.Date。請注意, as.Date 在最后會忽略垃圾,因此如果沒有其他字符可以跟隨日期,則可以。
x <- "X2018-01-11_poland"
lets <- paste(letters, collapse = "")
as.Date(chartr(lets, strrep(" ", nchar(lets)), tolower(x)))
## [1] "2018-01-11"
2)如果我們知道字串總是以 X 開頭并且日期緊隨其后出現,那么我們可以在 as.Date 格式字串中指定前綴。它也不使用任何正則運算式,僅使用基礎 R。
as.Date(x, "X%Y-%m-%d")
## [1] "2018-01-11"
3)如果你愿意妥協并使用一個非常簡單的正則運算式——這里 \D 匹配任何非數字并且反斜杠必須在引號內加倍。gsub 洗掉任何此類字符。
as.Date(gsub("\\D", "", x), "%Y%m%d")
## [1] "2018-01-11"
uj5u.com熱心網友回復:
使用基礎 R 的可能替代方案,或stringr和lubridate
as.Date(substr("X2018-01-11_poland", 2, 11), format = "%Y-%m-%d")
#> [1] "2018-01-11"
library(stringr)
library(lubridate)
ymd(str_sub("X2018-01-11_poland", 2, 11))
#> [1] "2018-01-11"
由reprex 包(v2.0.1)于 2021 年 12 月 22 日創建
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/390446.html
上一篇:如何使UI元素在加載時呈現但隨后依賴于按鈕進行進一步更新
下一篇:如何在條形圖中查看類別的名稱?
