As.Date With Dates in Format M/D/Y in R

as.Date with dates in format m/d/y in R

Use capital Y in as.Date call instead. This should do the trick:

> as.Date("3/15/2012", "%m/%d/%Y")
[1] "2012-03-15"

From the help file's examples you can realize when year is full specified you should use %Y otherwise %y for example:

> dates <- c("02/27/92", "02/27/92", "01/14/92", "02/28/92", "02/01/92")
> as.Date(dates, "%m/%d/%y")
[1] "1992-02-27" "1992-02-27" "1992-01-14" "1992-02-28" "1992-02-01"

You can see that in your example the Year format is 2012 then you should use %Y, and in the other example (taken from the as.Date help file) Year format is 92 then using %y is the correct way to go. See as.Date for further details.

change date from y-m-d to m/d/y format in R

Since your input date is in ISO 8601 format, you can call as.Date() on it directly to get a Date-classed object, and then format() can be used to stringify it in any format specifiable using the format specifiers documented here.

d <- '2008-01-01';
format(as.Date(d),'%m/%d/%Y');
## [1] "01/01/2008"

If you really don't want those leading zeroes, you'll have to strip them off yourself using gsub():

gsub('\\b0+','',format(as.Date(d),'%m/%d/%Y'));
## [1] "1/1/2008"

as.Date() function for %m/%Y (e.g. 04/2020) format

We can paste a day and then as.Date should work as 'Date' include day as well

as.Date(paste0(df$date, "/01"), "%m/%Y/%d")

Or convert to yearmon class with as.yearmon (from zoo) and wrap with as.Date

library(zoo)
as.Date(as.yearmon(df$date, "%m/%Y"))

data

df <- data.frame(date = c("04/2020", "05/2020"), stringsAsFactors = FALSE)

NOTE: From R 4.0.0, by default stringsAsFactors = FALSE

R convert Y-m-d or m/d/Y to the same format

Easier maybe to use parse_date

library(parsedate)
df$StartDate <- as.Date(parse_date(df$StartDate))

-output

> df$StartDate
[1] "2014-08-20" "2014-08-21" "2014-08-22" "2014-09-01" "2014-09-02" "2014-09-03"

Change of Date format

It should be %I to represent hours as decimal number (01–12), not %H, and %y to
years without century (00–99).

x <- "1/1/2021 12:00:00 AM"

format(strptime(x, "%m/%d/%Y %I:%M:%S %p"), "%m/%d/%y")
[1] "01/01/21"

Note that after you re-foramt the time object, it'll be a pure character string and lose all attributes of a time object.

How can I rearrange the date from d-m-y to m-d-y in R?

Try this:

beaches$Date = as.Date(as.character(beaches$Date), '%d-%m-%y')
beaches$New_Date = format(beaches$Date, '%m-%d-%y')

Output:

> head(beaches[, c('Date', 'New_Date')])
Date New_Date
1 2018-01-25 01-25-18
2 2018-02-07 02-07-18
3 2018-02-19 02-19-18
4 2018-01-19 01-19-18
5 2018-02-01 02-01-18
6 2018-03-08 03-08-18

Formatting M/D/YY dates in R

Format strings cope fine with that, and base R is all you need:

R> d <- as.Date("4/3/16", "%m/%d/%y")
R> d
[1] "2016-04-03"
R>

The only thing to remember, really, is that %y is for two-digit years whereas %Y is for four-digit years. All the gory details are in the corresponding help pages for as.Date(), strptime() and friends.

And repeat after me: Friends never let friends parse dates with string functions.

How to convert character to date with two different types of date formats in R?

You can do something like:

format_ymd  <- as.Date(dates, format = "%Y-%m-%d")
format_dmy <- as.Date(dates, format = "%d/%m/%Y")
as.Date(ifelse(is.na(format_ymd), format_dmy, format_ymd), origin = "1970-01-01")
# [1] "2022-04-08" "2021-01-26" "2021-07-14" "2021-12-27"

Converting Date formats in R

To obtain your required format i.e., 2016-month-day , you can use format function once you have converted vector of strings to Date type.

I hope below code snippet clears your doubt.

> d = c("2016-02-08","2016-02-18","2015-02-08","2016-02-02")
> class(d)
[1] "character"
> d = as.Date(d)
> class(d)
[1] "Date"
> d = format(d,"%Y-%b-%d")
> d
[1] "2016-Feb-08" "2016-Feb-18" "2015-Feb-08" "2016-Feb-02"

Format function converts the date type objects into the required format. Refer to this link for more information on date type formatting.



Related Topics



Leave a reply



Submit