This error occurs when you try to convert a number to a date without providing an origin date. You can solve this error by providing a date as an origin argument to the as.Date
function. For example,
as.Date(34291, origin = "1900-01-01")
This tutorial will go through the error in detail and how to solve it with code examples.
Example
Let’s look at an example of reproducing the error.
# Data frame containing water level of man made pond in cms after n days from creating df <- data.frame(days_after=c(14, 80, 40, 350), water_level=c(30, 20, 89, 50)) # Print structure of the data frame str(df)
The str()
function returns the structure of the data frame and informs us of the data type in each column:
'data.frame': 4 obs. of 2 variables: $ days_after : num 14 80 40 350 $ water_level: num 30 20 89 50
Both the days_after
and water_level
columns are numeric. We can use the as.Date method to convert the days_after column to date format.
df$days_after <- as.Date(df$days_after)
Let’s run the code to see what happens:
Error in as.Date.numeric(df$days_after) : 'origin' must be supplied
The error occurred because we did not specify an origin argument for the as.Date
method.
If you pass a numeric argument for x
to the as.Date
method, R interprets x
as the number of days since a specified origin.
Solution
We can solve the error by specifying an origin. The origin must be a Date
object or something that can be coerced by as.Date(origin, _)
to a Date
object.
Let’s look at the revised code:
df$days_after <- as.Date(df$days_after, origin="2007-07-04") df
Let’s run the code to get the result:
days_after water_level 1 2007-07-18 30 2 2007-09-22 20 3 2007-08-13 89 4 2008-06-18 50 [1] "Date"
When we provide an origin date, the R interpreter converts the numeric values to dates by adding the number of days in the days_after
column to the origin. For example,
- The first row of the
days_after
column is 14 and the date2007-07-18
is 14 days after2007-07-04
- The second row of the
days_after
column is 80 and the date2007-09-22
is 80 days after2007-07-04
We can confirm that the days_after
column has the class Date
using the class()
function:
class(df$days_after)
[1] "Date"
Summary
Congratulations on reading to the end of this tutorial!
For further reading on R-related errors, go to the articles:
- How to solve R Error in xj[i] : invalid subscript type ‘list’
- How to Solve R Error: Arguments imply differing number of rows
- How to Solve R Error: contrasts can be applied only to factors with 2 or more levels
- How to Solve R Error: Incorrect number of dimensions
Go to the online courses page on R to learn more about coding in R for data science and machine learning.
Have fun and happy researching!
Suf is a senior advisor in data science with deep expertise in Natural Language Processing, Complex Networks, and Anomaly Detection. Formerly a postdoctoral research fellow, he applied advanced physics techniques to tackle real-world, data-heavy industry challenges. Before that, he was a particle physicist at the ATLAS Experiment of the Large Hadron Collider. Now, he’s focused on bringing more fun and curiosity to the world of science and research online.