我正試圖將一個帶有日期的字符列轉換為日期格式。然而,這些日期的格式很模糊。一些條目的格式是%d.%m.%Y(例如,"03.02.2021"),而另一些是%d %b %Y(例如,"3 Feb 2021")。
我試過as.Date(tryFormats=c("%d %b %Y", "%d.%m.%Y")),但發現tryFormats只對第一個條目有彈性,所以型別為%d %b %Y的條目被正確識別,但那些%d.%m.%Y則變成NA,或者相反。我還嘗試了anytime包,但它以類似的方式產生了NAs。
我已經確保該列不包含任何NAs或空字串,并且我沒有收到任何錯誤資訊。
uj5u.com熱心網友回復:
試試parsedate包 :
df <-read. table(header=TRUE, text=
"d
03.02.2021
'2021年2月3日
13/3/2021
13-3-2020")
df %>% mutate(date=parsedate。 :parse_date(d))。
## d日期
##1 03.02.2021 2021-02-03
##2 3 Feb 2021 2021-02-03
##3 2021年3月13日 2021-03-13
##4 13-3-2020 2021-03-13
uj5u.com熱心網友回復:
與Roland的建議類似(但有所擴展),我的回答這里(在(2)部分)提出了一種處理多種候選格式的方法。
## sample data
x <- c("03. 02.2021", "3 Feb 2021")
格式 <- c("%d。 %m.%Y", "%d %b %Y")
日期<-為。 日期(rep(NA。 length(x))>
for (fmt in formats) {
nas <- is.na(dates)
dates[nas] <- as. Date(x[nas]。 format=fmt)。
}
日期
# [1] "2021-02-03" "2021-02-03"
在formats向量中,最好將最頻繁的格式放在第一位。如果有很多格式,我們可以在回圈中添加一個快速跳轉,比如
for (fmt in formats) {
nas <- is.na(dates)
if (! any(nas)) break
dates[nas] <- as. Date(x[nas]。 format=fmt)。
}。
但我懷疑,除非formats和x都相當大(我腦海中沒有量化 "大 "的尺寸),否則它真的不會有什么好處。
uj5u.com熱心網友回復:
你是否嘗試過lubridate?
df <-read. table(header=TRUE, text=
"d
03.02.2021
'2021年2月3日
13/3/2021
13-3-2020")
dmy(/span>df$d)
[1] "2021-2- 03" "2021-02-03" "2021-03-13" "2020-03-13"
uj5u.com熱心網友回復:
使用anydate
library(anytime)
addFormats(c("%d/m/%Y"。 '%d-%m-%Y') )
anydate(df$d)
[1] "2021-2- 03" "2021-02-03" "2021-03-13" "2020-03-13"
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/310879.html
標籤:
