簡體   English   中英

將四位數年份值轉換為類日期

[英]Convert four digit year values to class Date

我的數據集中有一個整數列,它有四位數的年份值,例如:

 c(2001, 2002, 2002, 2002, 2003, 2005) 

我嘗試使用as.Date將四位數年份轉換為類Date

year <- as.Date(as.character(data_file$evtYear), format = "%Y")

但輸出是:

"2001-05-15" "2002-05-15" "2002-05-15" "2002-05-15" "2003-05-15" "2005-05-15"

這給出了錯誤的輸出。 它在一個日期(2001 年和 15 年)中給出兩年的值。

我只想將我的四位數年份部分從原始數據轉換為 'Year' 作為類Date 預期輸出很簡單:

2001 2002 2002 2002 2003 2005 

但是他們的班級應該是Date類型的。

如何在 R 中實現這一點?

根據評論,提出問題的人不需要將數字年份更改為"Date"類; 盡管如此,問題是如何做到這一點,所以這里是一個答案。

以下是從 4 位數字年份創建"Date"類對象的幾種方法。 全部使用as.Date

yrs <- c(2001, 2002, 2002, 2002, 2003, 2005)

1) ISO 日期

as.Date(ISOdate(yrs, 1, 1))  # beginning of year
as.Date(ISOdate(yrs, 12, 31))  # end of year

這個 ISOdate 解決方案有點棘手,因為它創建了一個中間 POSIXct 對象,因此可能存在時區問題。 您可能更喜歡以下之一。

2)粘貼

as.Date(paste(yrs, 1, 1, sep = "-")) # beginning of year
as.Date(paste(yrs, 12, 31, sep = "-")) # end of year

3) 動物園::as.yearmon

library(zoo)

as.Date(as.yearmon(yrs)) # beginning of year
as.Date(as.yearmon(yrs) + 11/12, frac = 1) # end of year

注意:如果y是上述任何一項的結果,則format(y, "%Y")給出字符年份,而as.numeric(format(y, "%Y"))給出數字年份。

正如 OP 已經認識到的那樣,僅一年並不能構成有效日期,因為未指定月份和日期。

然而,一些日期和日期時間轉換函數,例如ymd() , parse_date_time() ,在lubridate包中識別一個truncated的參數,以允許解析不完整的日期:

yrs <- c(2001, 2002, 2002, 2002, 2003, 2005)
lubridate::ymd(yrs, truncated = 2L)
 [1] "2001-01-01" "2002-01-01" "2002-01-01" "2002-01-01" "2003-01-01" "2005-01-01"

年份已在 1 月 1 日之前完成,以便確定有效日期。 結果是類Date

你可以做:

library(lubridate)
yrs <- c(2001, 2002, 2002, 2002, 2003, 2005)
yr <- as.Date(as.character(yrs), format = "%Y")
y <- year(yr)

輸出:

2001 2002 2002 2002 2003 2005

一個潤滑的答案:

  library(lubridate)
  year <- ymd(sprintf("%d-01-01",data_file$evtYear))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM