簡體   English   中英

將數值轉換為日期

[英]Convert numeric values to dates

我有一個如下的數值向量

aa <- c(1022011, 2022011, 13022011, 23022011) (this vector is just a sample, it is very long)

值的寫入方式是第一個值是天,然后是月,然后是年。

我現在正在做的是

as.Date(as.character(aa), %d%m%Y")

但,

如果是一位數字的日期,則會引起問題(返回NA)。 (即1022011、2022011)。

所以基本上

as.Date("1022011", "%d%m%Y") does not work

as.Date("01022011", "%d%m%Y")  (pasting '0' ahead of the number) works. 

在這種情況下,我想避免粘貼“ 0”。 是否有其他(直接)替代方法可將數值一次轉換為日期?

可以使用sub重新排列它,在這種情況下為純格式as.Date ,無格式有效:

x <- c(1022011, 11022011) # test data

pat <- "^(..?)(..)(....)$"
as.Date(sub(pat, "\\3-\\2-\\1", x))

給予:

[1] "2011-02-01" "2011-02-11"

根據您的平台,可以使用sprintf以便在開頭添加零。 看來Mac可以做到這一點,但考慮到與OP的討論,Windows 7則不行。

aa <- c(1022011, 2022011, 13022011, 23022011)

as.Date(sprintf("%08s", aa), format = "%d%m%Y")

[1] "2011-02-01" "2011-02-02" "2011-02-13" "2011-02-23"

更新

@CathyG好心地提到sprintf("%08i",aa)在Windows 7上可以運行。

您可以在lubridate使用dmy

library(lubridate)
aa <- c(1022011, 2022011, 13022011, 23022011)
> dmy(aa)
[1] "2011-02-01 UTC" "2011-02-02 UTC" "2011-02-13 UTC" "2011-02-23 UTC"

並且如果您不希望將時區包裝為as.Date

> as.Date(dmy(aa))
[1] "2011-02-01" "2011-02-02" "2011-02-13" "2011-02-23"

謝謝@Ben Bolker,

> as.Date(mdy(aa))
[1] "2011-01-02" "2011-02-02" "2012-01-02" "2011-01-02"

我知道您不想添加“ 0”,但是仍然可以在基數R中運行:

as.Date(sapply(aa,function(x){ifelse(nchar(x)==8,x,paste("0",x,sep=""))}),format = "%d%m%Y")

暫無
暫無

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

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