簡體   English   中英

如何在R中將整數轉換為日期格式?

[英]How to convert integer to date format in R?

我正在嘗試將R中的數據幀中的整數數據轉換為日期格式。

數據在orig_svcg_filtered數據幀內名為svcg_cycle的列下。

原始數據看起來像200502、200503等,我希望將其轉換為yyyy-mm-dd格式。

我正在嘗試使用以下代碼:

as.Date(orig_svcg_filtered$svcg_cycle, origin = "2000-01-01")

但是輸出不是我期望的:

[1] "2548-12-15" "2548-12-15" "2548-12-15" "2548-12-15" "2548-12-15" 

而應該是2005-02-01、2005-03-01等。

如何解決呢?

如果你有

x <- c(200502, 200503)

然后

as.Date(x, origin = "2000-01-01")

告訴R您想要2000-01-01之后的200,502和200,503天。 help("as.Date")

as.Date將接受數字數據(自一個紀元以來的天數),但僅在提供了origin的情況下。

因此,整數數據給出的是提供的原點后的天數,而不是日期的某種數字代碼,例如“ 2005-02-01”的200502。

你想要的是

as.Date(paste(substr(x, 1, 4), substr(x, 5, 6), "01", sep = "-"))

# [1] "2005-02-01" "2005-03-01"

paste(substr(x, 1, 4), substr(x, 5, 6), "01", sep = "-")

部分接受您的整數並創建類似的字符串

# [1] "2005-02-01" "2005-03-01"

然后as.Date()知道如何處理它們。

您可以選擇做類似的事情

as.Date(paste0(x, "01"), format = "%Y%m%d")

# [1] "2005-02-01" "2005-03-01"

這只是在每個元素上(當天)粘貼"01" ,轉換為字符,然后告訴as.Date()將日期讀入的格式。 (請參閱help("as.Date")help("strptime") )。

我喜歡使用Regex來解決這類字符串格式問題。 默認情況下, as.Date僅檢查幾種標准日期格式,例如YYYY-MM-DD。 當您有一個整數日期(即距某個參考點的秒數)時,將使用origin ,但是在這種情況下,您的日期實際上不是整數日期,而只是一個格式化為整數字符串的日期。

我們只需用破折號將月份和日期分開,然后添加一天(在這種情況下是月份的第一天)以使其成為有效日期(您必須有一天將其存儲為R中的日期對象)。 正則表達式位捕獲組1中的前4位和組2中的后兩位。 然后,我們將用破折號分隔的兩組與日期合並在一起。

as.Date(gsub("^(\\d{4})(\\d{2})", "\\1-\\2-01", x))

[1] "2005-02-01" "2005-03-01"

在這種情況下,您無需指定format ,因為YYYY-MM-DD是as.Date檢查的標准格式as.Date ,但是format參數為format = "%Y-%m-%d"

暫無
暫無

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

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