Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to avoid date formatted values getting converted to numeric when assigned to a matrix or data frame?

Tags:

I have run into an issue I do not understand, and I have not been able to find an answer to this issue on this website (I keep running into answers about how to convert dates to numeric or vice versa, but that is exactly what I do not want to know).

The issue is that R converts values that are formatted as a date (for instance "20-09-1992") to numeric values when you assign them to a matrix or data frame. For example, we have "20-09-1992" with a date format, we have checked this using class().

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

We now assign this value to a matrix, imaginatively called 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]) 

Suddenly the previously date formatted "20-09-1992" has become a numeric with the value 8298. I don't want a numeric with the value 8298, I want a date that looks like "20-09-1992" in date format.

So I was wondering whether this is simply how R works, and we are not allowed to assign dates to matrices and data frames (somehow I have managed to have dates in other matrices/data frames, but it beats me why those other times were different)? Is there a special method to assigning dates to data frames and matrices that I have missed and have failed to deduce from previous (somehow successful) attempts at assigning dates to data frames/matrices?

like image 252
Joes de Natris Avatar asked Jan 17 '17 12:01

Joes de Natris


People also ask

How do you keep date format in R?

To format the dates in R, use the format() function. The format() method accepts an R object and the format in which we want the output. The format() method provides you with formatting an R object for pretty printing. The Dates in R are expressed as the number of days since 1970-01-01.

How do I convert a character variable to a date in R?

You can use the as. Date( ) function to convert character data to dates. The format is as. Date(x, "format"), where x is the character data and format gives the appropriate format.

How do I change the date format in R studio?

To format = , provide a character string (in quotes) that represents the current date format using the special “strptime” abbreviations below. For example, if your character dates are currently in the format “DD/MM/YYYY”, like “24/04/1968”, then you would use format = "%d/%m/%Y" to convert the values into dates.


2 Answers

I don't think you can store dates in a matrix. Use a data frame or data table. If you must store dates in a matrix, you can use a matrix of lists.

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" 

Edited: I also just re-read you had this issue with data frame. I'm not sure why.

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

Edited: This has been a learning experience for me with R and dates. Apparently the date you supplied was converted to number of days since origin. Origin is defined as Jan 1st,1970. To convert this back to a date format at some point

Matrix      [,1] [1,] 8298  as.Date(Matrix, origin ="1970-01-01") [1] "1992-09-20"  
like image 100
akaDrHouse Avatar answered Oct 24 '22 12:10

akaDrHouse


try the following: First specify your date vector & then use

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

the dates will appear as a text.

like image 32
Marco Avatar answered Oct 24 '22 13:10

Marco