在查看Why does mapply not return date-objects?后,我仍无法解决问题。
问题:
我有一个日期值矩阵,我想通过以下函数将它们转换为日期对象:
convert_endDate <- function(e){
d <- paste(e[1], e[2],e[3], sep = "-")
print(as.Date(strptime(d, format = "%Y-%m-%d")))
return(as.Date(strptime(d, format = "%Y-%m-%d")))
}
apply(end, 1,convert_endDate)
然而,它总是向我返回数字:
[1] 16276 15850 14085 13569 13293 12473 12046 11316 10950 10950
现在,如何将其转换为Dates ???
数据矩阵end
如下:
eyr em
[1,] 2014 7 25
[2,] 2013 5 25
[3,] 2008 7 25
[4,] 2007 2 25
[5,] 2006 5 25
[6,] 2004 2 25
[7,] 2002 12 25
[8,] 2000 12 25
[9,] 1999 12 25
[10,] 1999 12 25
答案 0 :(得分:2)
paste
和as.Date
都是矢量化的,因此不需要apply
。由于as.Date
首先尝试format
"%Y-%m-%d"
,即此处paste
产生的格式相同,因此不需要显式的format
参数。
m <- matrix(data = c(2014, 7, 25, 2013, 5, 25), ncol = 3, byrow = TRUE)
m
# [,1] [,2] [,3]
# [1,] 2014 7 25
# [2,] 2013 5 25
date <- as.Date(paste(m[ , 1], m[ , 2], m[ , 3], sep = "-"))
date
# [1] "2014-07-25" "2013-05-25"
str(date)
# Date[1:2], format: "2014-07-25" "2013-05-25"
另请参阅?apply
:&#34;在所有情况下,as.vector
都会将结果强制转换为其中一种基本矢量类型&#34;。
答案 1 :(得分:1)
end <- matrix(c(2014, 7, 25, 2013, 5, 25, 2008, 7, 25, 2007, 2, 25, 2006, 5, 25), ncol=3, byrow=T)
res <- apply(end,1, convert_endDate)
as.Date(res, origin="1970-01-01")
#[1] "2014-07-25" "2013-05-25" "2008-07-25" "2007-02-25" "2006-05-25"