我遇到了一个问题,但是我不理解它,也无法在这个网站上找到它的答案(我一直在找如何将日期转换为数字或反之的答案,但我真正想知道的是不要进行转换)。
问题是,当您将格式为日期的值(例如“20-09-1992”)分配给矩阵或数据框时,R会将其转换为数值。例如,我们有一个带有日期格式的“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 <- 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的工作方式,我们不允许将日期分配给矩阵和数据框(不知何故,我已经在其他矩阵/数据框中有日期,但是为什么那些时间不同呢?)是否有一种特殊的方法可以将日期分配给数据框和矩阵,而我错过了并且未能从以前(某些成功的)尝试中推断出来?
matrix
函数会从输入向量中提取所有属性。这在?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"))
。 - David Arenburg