Dates and Times

swirl()

| Welcome to swirl! Please sign in. If you've been here before, use the same name as you
| did then. If you are new, call yourself something unique.

What shall I call you? Krishnakanth Allika

| Please choose a course, or type 0 to exit swirl.

1: R Programming
2: Take me to the swirl course repository!

Selection: 1

| Please choose a lesson, or type 0 to return to course menu.

1: Basic Building Blocks 2: Workspace and Files 3: Sequences of Numbers
4: Vectors 5: Missing Values 6: Subsetting Vectors
7: Matrices and Data Frames 8: Logic 9: Functions
10: lapply and sapply 11: vapply and tapply 12: Looking at Data
13: Simulation 14: Dates and Times 15: Base Graphics

Selection: 14

| | 0%

| R has a special way of representing dates and times, which can be helpful if you're
| working with data that show how something changes over time (i.e. time-series data) or
| if your data contain some other temporal information, like dates of birth.

...

|== | 3%
| Dates are represented by the 'Date' class and times are represented by the 'POSIXct'
| and 'POSIXlt' classes. Internally, dates are stored as the number of days since
| 1970-01-01 and times are stored as either the number of seconds since 1970-01-01 (for
| 'POSIXct') or a list of seconds, minutes, hours, etc. (for 'POSIXlt').

...

|==== | 6%
| Let's start by using d1 <- Sys.Date() to get the current date and store it in the
| variable d1. (That's the letter 'd' and the number 1.)

d1<-Sys.Date()

| That's the answer I was looking for.

|======= | 8%
| Use the class() function to confirm d1 is a Date object.

class(d1)
[1] "Date"

| Keep working like that and you'll get there!

|========= | 11%
| We can use the unclass() function to see what d1 looks like internally. Try it out.

unclass(d1)
[1] 18367

| Keep up the great work!

|=========== | 14%
| That's the exact number of days since 1970-01-01!

...

|============= | 17%
| However, if you print d1 to the console, you'll get today's date -- YEAR-MONTH-DAY.
| Give it a try.

d1
[1] "2020-04-15"

| You got it!

|================ | 19%
| What if we need to reference a date prior to 1970-01-01? Create a variable d2
| containing as.Date("1969-01-01").

d2<-as.Date("1969-01-01")

| You nailed it! Good job!

|================== | 22%
| Now use unclass() again to see what d2 looks like internally.

unclass(d2)
[1] -365

| That's a job well done!

|==================== | 25%
| As you may have anticipated, you get a negative number. In this case, it's -365, since
| 1969-01-01 is exactly one calendar year (i.e. 365 days) BEFORE 1970-01-01.

...

|====================== | 28%
| Now, let's take a look at how R stores times. You can access the current date and time
| using the Sys.time() function with no arguments. Do this and store the result in a
| variable called t1.

t1<-Sys.time()

| You're the best!

|======================== | 31%
| View the contents of t1.

t1
[1] "2020-04-15 17:21:46 IST"

| You are doing so well!

|=========================== | 33%
| And check the class() of t1.

class(t1)
[1] "POSIXct" "POSIXt"

| All that hard work is paying off!

|============================= | 36%
| As mentioned earlier, POSIXct is just one of two ways that R represents time
| information. (You can ignore the second value above, POSIXt, which just functions as a
| common language between POSIXct and POSIXlt.) Use unclass() to see what t1 looks like
| internally -- the (large) number of seconds since the beginning of 1970.

unclass(t1)
[1] 1586951506

| You got it right!

|=============================== | 39%
| By default, Sys.time() returns an object of class POSIXct, but we can coerce the result
| to POSIXlt with as.POSIXlt(Sys.time()). Give it a try and store the result in t2.

t2<-as.POSIXlt(Sys.time())

| All that hard work is paying off!

|================================= | 42%
| Check the class of t2.

class(t2)
[1] "POSIXlt" "POSIXt"

| All that hard work is paying off!

|==================================== | 44%
| Now view its contents.

t2
[1] "2020-04-15 17:23:09 IST"

| That's the answer I was looking for.

|====================================== | 47%
| The printed format of t2 is identical to that of t1. Now unclass() t2 to see how it is
| different internally.

unclass(t2)
$sec
[1] 9.964687

$min
[1] 23

$hour
[1] 17

$mday
[1] 15

$mon
[1] 3

$year
[1] 120

$wday
[1] 3

$yday
[1] 105

$isdst
[1] 0

$zone
[1] "IST"

$gmtoff
[1] 19800

attr(,"tzone")
[1] "" "IST" "+0630"

| Keep up the great work!

|======================================== | 50%
| t2, like all POSIXlt objects, is just a list of values that make up the date and time.
| Use str(unclass(t2)) to have a more compact view.

str(unclass(t2))
List of 11
$ sec : num 9.96 $ min : int 23
$ hour : int 17 $ mday : int 15
$ mon : int 3 $ year : int 120
$ wday : int 3 $ yday : int 105
$ isdst : int 0 $ zone : chr "IST"
$ gmtoff: int 19800

  • attr(*, "tzone")= chr [1:3] "" "IST" "+0630"

| You are quite good my friend!

|========================================== | 53%
| If, for example, we want just the minutes from the time stored in t2, we can access
| them with t2$min. Give it a try.

t2$min
[1] 23

| Nice work!

|============================================ | 56%
| Now that we have explored all three types of date and time objects, let's look at a few
| functions that extract useful information from any of these objects -- weekdays(),
| months(), and quarters().

...

|=============================================== | 58%
| The weekdays() function will return the day of week from any date or time object. Try
| it out on d1, which is the Date object that contains today's date.

weekdays(d1)
[1] "Wednesday"

| Perseverance, that's the answer.

|================================================= | 61%
| The months() function also works on any date or time object. Try it on t1, which is the
| POSIXct object that contains the current time (well, it was the current time when you
| created it).

months(t1)
[1] "April"

| Excellent job!

|=================================================== | 64%
| The quarters() function returns the quarter of the year (Q1-Q4) from any date or time
| object. Try it on t2, which is the POSIXlt object that contains the time at which you
| created it.

quarters(t2)
[1] "Q2"

| Your dedication is inspiring!

|===================================================== | 67%
| Often, the dates and times in a dataset will be in a format that R does not recognize.
| The strptime() function can be helpful in this situation.

...

|======================================================== | 69%
| strptime() converts character vectors to POSIXlt. In that sense, it is similar to
| as.POSIXlt(), except that the input doesn't have to be in a particular format
| (YYYY-MM-DD).

...

|========================================================== | 72%
| To see how it works, store the following character string in a variable called t3:
| "October 17, 1986 08:24" (with the quotes).

t3<-"October 17, 1986 08:24"

| Keep working like that and you'll get there!

|============================================================ | 75%
| Now, use strptime(t3, "%B %d, %Y %H:%M") to help R convert our date/time object to a
| format that it understands. Assign the result to a new variable called t4. (You should
| pull up the documentation for strptime() if you'd like to know more about how it
| works.)

strptime(t3, "%B %d, %Y %H:%M")
[1] "1986-10-17 08:24:00 IST"

| Not quite, but you're learning! Try again. Or, type info() for more options.

| t4 <- strptime(t3, "%B %d, %Y %H:%M") will convert our date/time object to a format
| that R understands.

t4<-strptime(t3, "%B %d, %Y %H:%M")

| You got it right!

|============================================================== | 78%
| Print the contents of t4.

t4
[1] "1986-10-17 08:24:00 IST"

| You're the best!

|================================================================ | 81%
| That's the format we've come to expect. Now, let's check its class().

class(t4)
[1] "POSIXlt" "POSIXt"

| Great job!

|=================================================================== | 83%
| Finally, there are a number of operations that you can perform on dates and times,
| including arithmetic operations (+ and -) and comparisons (<, ==, etc.)

...

|===================================================================== | 86%
| The variable t1 contains the time at which you created it (recall you used Sys.time()).
| Confirm that some time has passed since you created t1 by using the 'greater than'
| operator to compare it to the current time: Sys.time() > t1

Sys.time()>t1
[1] TRUE

| That's correct!

|======================================================================= | 89%
| So we know that some time has passed, but how much? Try subtracting t1 from the current
| time using Sys.time() - t1. Don't forget the parentheses at the end of Sys.time(),
| since it is a function.

Sys.time()-t1
Time difference of 12.21747 mins

| You are amazing!

|========================================================================= | 92%
| The same line of thinking applies to addition and the other comparison operators. If
| you want more control over the units when finding the above difference in times, you
| can use difftime(), which allows you to specify a 'units' parameter.

...

|============================================================================ | 94%
| Use difftime(Sys.time(), t1, units = 'days') to find the amount of time in DAYS that
| has passed since you created t1.

difftime(Sys.time(), t1, units = 'days')
Time difference of 0.01950932 days

| That's the answer I was looking for.

|============================================================================== | 97%
| In this lesson, you learned how to work with dates and times in R. While it is
| important to understand the basics, if you find yourself working with dates and times
| often, you may want to check out the lubridate package by Hadley Wickham.

...

|================================================================================| 100%
| Would you like to receive credit for completing this course on Coursera.org?

1: No
2: Yes

Selection: 2
What is your email address? [email protected]
What is your assignment token? xXxXxxXXxXxxXXXx
Grade submission succeeded!

| Perseverance, that's the answer.

| You've reached the end of this lesson! Returning to the main menu...

| Please choose a course, or type 0 to exit swirl.

1: R Programming
2: Take me to the swirl course repository!

Selection: 0

| Leaving swirl now. Type swirl() to resume.

ls()
[1] "d1" "d2" "dl" "t1" "t2" "t3" "t4"
rm(list=ls())

Last updated 2020-04-20 23:37:33.781884 IST

Comments