我有一個存盤為字串的日期向量,其中一些采用 YYYY-mm-dd 格式,有些采用 YYYY-dd-mm 格式。我需要弄清楚如何將這些轉換為日期。幸運的是,YYYY-dd-mm 格式的所有實體都在任何一個月的 12 天之后,因此它們很容易辨別。
試過
dates <- c("2017-12-31","2017-12-30","2017-29-12","2017-28-12")
dates <- as.Date(dates, format = c("%Y-%m-%d","%Y-%d-%m"))
正在回傳以下內容:
[1] "2017-12-31" "2017-12-30" NA NA
uj5u.com熱心網友回復:
使用并傳遞您的日期可以采用的多種格式parse_date_time。lubridate
dates <- c("2017-12-31","2017-12-30","2017-29-12","2017-28-12")
as.Date(lubridate::parse_date_time(dates, c('ymd', 'ydm')))
#[1] "2017-12-31" "2017-12-30" "2017-12-29" "2017-12-28"
與其他答案一樣,這首先優先考慮ymd,如果它無法識別日期,則繼續檢查ydm格式。
uj5u.com熱心網友回復:
如果您希望 YMD 成為默認值,并且 YDM 成為任何不起作用的東西,請先使用 YMD,然后回傳并重試任何產生缺失值的結果:
result = as.Date(dates, format = "%Y-%m-%d")
result[is.na(result)] = as.Date(dates[is.na(result)], format = "%Y-%d-%m")
result
# [1] "2017-12-31" "2017-12-30" "2017-12-29" "2017-12-28"
這確實讓我感到緊張,您假設月份和日期均小于 13 的任何日期都是 YMD ......如果沒有充分的理由,我不會做出這樣的假設。
uj5u.com熱心網友回復:
這是一個稍長的方法。
# sample date
dates <- c("2015-02-23","2015-02-12","2015-18-02","2015-25-02")
# libraries
library(testit) #for has_warning
library(lubridate) #for date functions
此功能將更正日期。
correct_dates = function(dates)
{
dates_new = character()
for(i in 1:length(dates))
{
#print(i)
if(has_warning(day(ydm(dates[i]))>12))
{dates_new = append(dates_new, ymd(dates[i]))}
else
{dates_new = append(dates_new, ydm(dates[i]))}
}
return(dates_new)
}
檢查結果
> dates
[1] "2015-02-23" "2015-02-12" "2015-18-02" "2015-25-02"
> correct_dates(dates)
[1] "2015-02-23" "2015-12-02" "2015-02-18" "2015-02-25"
uj5u.com熱心網友回復:
使用基本 R 選項 as.Date
> apply(list2DF(lapply(c("%Y-%m-%d", "%Y-%d-%m"), as.Date, x = dates)), 1, na.omit)
[1] "2017-12-31" "2017-12-30" "2017-12-29" "2017-12-28"
uj5u.com熱心網友回復:
使用parse_date自parsedate
library(parsedate)
as.Date(parse_date(dates))
#[1] "2017-12-31" "2017-12-30" "2017-12-29" "2017-12-28"
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/410993.html
標籤:
上一篇:使用Bash將自該行中的日期起的天數附加到檔案中的每一行
下一篇:需要MYSQL資料庫查詢解決方案
