My dataframe
a1 <- c("a","a","b","b","c","d","e","e")
b2 <- c("01.01.2015", "02.02.2015", "14.02.2012", "16.08.2008", "17.06.2003", "31.01.2015", "07.01.2022", "09.05.2001")
c3 <- c("1a", "2b", "3c", "4d", "5e", "6f", "7g", "8h")
d3 <- c(1:8)
df2 <- data.frame(a1,b2,c3,d3, stringsAsFactors = F)
My code.
library(dplyr)
library(magrittr)
test <- df2 %>%
group_by(a1) %>%
as.Date(b2, format = "%d.%m.%Y")
Error in as.Date.default(., b2, format = "%d.%m.%Y") : do not know how to convert '.' to class “Date”
Well, I tried without the pipe:
df$b2 <- as.Date(df$b2, format = "%d.%m.%Y")
Error in df$b2 : object of type 'closure' is not subsettable
First: Why do I get two different error messages since I am (for my understanding) am doing the same?
Second, why cant I convert my column to date?!
I might should add that I am aware of using mutate
to alter the column as date
format. But I wonder why my approach is not working.
Use pandas to_datetime() function to convert the column to DateTime on DataFrame. Use the format parameter of this method to specify the pattern of the DateTime string you wanted to convert.
To convert a data frame column of type string into date/time in R, call as. POSIXct() function and pass the column as argument to this function. We may optionally pass time zone, date/time format, etc., to this function. POSIXct class represents the calendar dates and times.
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.
Do the transformations within mutate
df2 %>%
group_by(a1) %>%
mutate(b2=as.Date(b2, format = "%d.%m.%Y"))
# a1 b2 c3 d3
# (chr) (date) (chr) (int)
#1 a 2015-01-01 1a 1
#2 a 2015-02-02 2b 2
#3 b 2012-02-14 3c 3
#4 b 2008-08-16 4d 4
#5 c 2003-06-17 5e 5
#6 d 2015-01-31 6f 6
#7 e 2022-01-07 7g 7
#8 e 2001-05-09 8h 8
If we need to do only the transformation, we don't need to group by 'a1'.
mutate(df2, b2= as.Date(b2, format= "%d.%m.%Y"))
By using %<>%
operator from magrittr
, we can transform in place.
df2 %<>%
mutate(b2= as.Date(b2, format= "%d.%m.%Y"))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With