如何避免日期格式化值在分配给矩阵或数据框时转换为数字?

问题描述:

我遇到了一个我不明白的问题,我一直无法在这个网站上找到这个问题的答案(我一直在回答关于如何将日期转换为数字或反之亦然,但这正是我不想知道的)。如何避免日期格式化值在分配给矩阵或数据框时转换为数字?

问题在于R将格式为日期(例如“20-09-1992”)的值转换为数值时,将它们分配给矩阵或数据帧。 例如,我们使用日期格式“20-09-1992”,我们使用class()进行了检查。

as.Date("20-09-1992", format = "%d-%m-%Y") 
class(as.Date("20-09-1992", format = "%d-%m-%Y")) 

我们现在这个值赋给一个矩阵,想象力称为矩阵:

Matrix <- matrix(NA,1,1) 
Matrix[1,1] <- as.Date("20-09-1992", format = "%d-%m-%Y") 
Matrix[1,1] 
class(Matrix[1,1]) 

突然格式化之前日期“20-09-1992”已成为价值8298.我不数值不想要一个数值为8298的数字,我想要一个日期格式为“20-09-1992”的日期。

所以我想知道这是不是R是如何工作的,我们不允许将日期分配给矩阵和数据帧(不知何故,我已经设法在其他矩阵/数据帧中有日期,但它使我为什么跳动其他时间是不同的)?是否有一种特殊的方法将日期分配给数据框架和矩阵,这些数据框架和矩阵是我错过的,并且未能从以前(某种程度上成功的)尝试向数据框/矩阵分配日期时推论出来?

+0

R中的“矩阵”从输入向量中条纹化所有属性。这在'?matrix'中有记录:“*一个可选的数据向量(包括一个列表或表达式向量)。非原子分类的R对象被as.vector强制转换,并丢弃所有的属性。如果你要运行'attributes(as.Date(“20-09-1992”,format =“%d-%m-%Y”))''你会发现'class'是一个属性。当类被剥离时,'Date'向量就回到它的存储模式,即storage.mode(as.Date(“20-09-1992”,format =“%d-%m-%Y” ))'。另见'unclass(as.Date(“20-09-1992”,format =“%d-%m-%Y”))' –

+0

谢谢!也为其他评论! –

我不认为你可以将日期存储在矩阵中。使用数据框或数据表。如果您必须将日期存储在矩阵中,则可以使用列表矩阵。

Matrix <- matrix(NA,1,1) 
Matrix[1,1] <- as.list(as.Date("20-09-1992", format = "%d-%m-%Y"),1) 
Matrix 
[[1]] 
[1] "1992-09-20" 

编辑:我也只是重新读你有这个问题与数据框。我不知道为什么。

mydate<-as.Date("20-09-1992", format = "%d-%m-%Y") 
mydf<-data.frame(mydate) 
mydf 

     mydate 
1 1992-09-20 

编辑:这对我来说是一个学习经验与R和日期。显然,您提供的日期已转换为自出现以来的天数。起源定义为1970年1月1日。要将其转换回日期格式在某些时候

Matrix 
    [,1] 
[1,] 8298 

as.Date(Matrix, origin ="1970-01-01") 
[1] "1992-09-20" 
+0

非常感谢! 我发现了一个解决方法(将日期存储为字符,然后在调用循环或函数中的字符时将其格式更改为as.date),lubridate听起来就像我需要做的更简单! 所以,再次,谢谢! –

+0

谢谢@DavidArenburg。我相应地编辑了帖子! – akaDrHouse

尝试以下方法:一是指定日期矢量&然后用

rownames(mat) <- as.character(date_vector) 

日期将显示为文本。