[英]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.