How to transform the class of a "factor" column into "date" within a data.frame?

Asked

Viewed 661 times

5

I have a base extracted in csv (dados_base), with the period from Dec/2017 to Jan/2019, which has three columns: USUARIO, DT_PAGTO and VL_PED_PG, where the first field represents users with the class "integer", the second field represents the payment date with the class "factor" and the third field represents the value in reais with the class "numeric". In my case I need to turn the column DT_PAGTO class "factor" for "date".

I tried to use the mutate:

dados_base2 = dados_base %>%
  mutate(DT_PAGTO = as.Date(DT_PAGTO,"%d/%m/%y"))

class(dados_base$DT_PAGTO)
[1] "Date"

print(dados_base2$DT_PAGTO)
[1] "2020-12-20"

In my attempt the class is successfully transformed, but the date format does not match the original csv date. Is there another way to transform the class? What mistake am I making?

Follows the dput to aid in understanding:

dput(head(dados_base, 50))
structure(list(USUARIO = c(282746L, 6651152L, 6622750L, 183147L, 
833097L, 5654010L, 62129L, 640459L, 283914L, 6833181L, 843495L, 
6696269L, 179480L, 71173L, 203562L, 979164L, 6747726L, 5683083L, 
6797883L, 245945L, 373197L, 25797L, 599336L, 827926L, 6728407L, 
6815081L, 244841L, 6797883L, 370121L, 211326L, 6825906L, 35976L, 
6614515L, 83303L, 373197L, 473348L, 350239L, 191273L, 364387L, 
294993L, 6781972L, 288423L, 6447749L, 173166L, 165653L, 6652688L, 
6690957L, 978119L, 597592L, 487315L), DT_PAGTO = structure(c(260L, 
260L, 260L, 260L, 260L, 260L, 260L, 260L, 260L, 260L, 260L, 260L, 
260L, 260L, 260L, 260L, 260L, 260L, 260L, 260L, 260L, 260L, 260L, 
260L, 260L, 260L, 260L, 260L, 260L, 260L, 260L, 260L, 260L, 260L, 
260L, 260L, 260L, 260L, 260L, 260L, 260L, 260L, 260L, 260L, 260L, 
260L, 260L, 260L, 260L, 260L), .Label = c("01/01/2018", "01/01/2019", 
"01/02/2018", "01/03/2018", "01/04/2018", "01/05/2018", "01/06/2018", 
"01/07/2018", "01/08/2018", "01/09/2018", "01/10/2018", "01/11/2018", 
"01/12/2018", "02/01/2018", "02/01/2019", "02/02/2018", "02/03/2018", 
"02/04/2018", "02/05/2018", "02/06/2018", "02/07/2018", "02/08/2018", 
"02/09/2018", "02/10/2018", "02/11/2018", "02/12/2018", "03/01/2018", 
"03/01/2019", "03/02/2018", "03/03/2018", "03/04/2018", "03/05/2018", 
"03/06/2018", "03/07/2018", "03/08/2018", "03/09/2018", "03/10/2018", 
"03/11/2018", "03/12/2018", "04/01/2018", "04/01/2019", "04/02/2018", 
"04/03/2018", "04/04/2018", "04/05/2018", "04/06/2018", "04/07/2018", 
"04/08/2018", "04/09/2018", "04/10/2018", "04/11/2018", "04/12/2018", 
"05/01/2018", "05/01/2019", "05/02/2018", "05/03/2018", "05/04/2018", 
"05/05/2018", "05/06/2018", "05/07/2018", "05/08/2018", "05/09/2018", 
"05/10/2018", "05/11/2018", "05/12/2018", "06/01/2018", "06/01/2019", 
"06/02/2018", "06/03/2018", "06/04/2018", "06/05/2018", "06/06/2018", 
"06/07/2018", "06/08/2018", "06/09/2018", "06/10/2018", "06/11/2018", 
"06/12/2018", "07/01/2018", "07/01/2019", "07/02/2018", "07/03/2018", 
"07/04/2018", "07/05/2018", "07/06/2018", "07/07/2018", "07/08/2018", 
"07/09/2018", "07/10/2018", "07/11/2018", "07/12/2018", "08/01/2018", 
"08/01/2019", "08/02/2018", "08/03/2018", "08/04/2018", "08/05/2018", 
"08/06/2018", "08/07/2018", "08/08/2018", "08/09/2018", "08/10/2018", 
"08/11/2018", "08/12/2018", "09/01/2018", "09/01/2019", "09/02/2018", 
"09/03/2018", "09/04/2018", "09/05/2018", "09/06/2018", "09/07/2018", 
"09/08/2018", "09/09/2018", "09/10/2018", "09/11/2018", "09/12/2018", 
"10/01/2018", "10/01/2019", "10/02/2018", "10/03/2018", "10/04/2018", 
"10/05/2018", "10/06/2018", "10/07/2018", "10/08/2018", "10/09/2018", 
"10/10/2018", "10/11/2018", "10/12/2018", "11/01/2018", "11/01/2019", 
"11/02/2018", "11/03/2018", "11/04/2018", "11/05/2018", "11/06/2018", 
"11/07/2018", "11/08/2018", "11/09/2018", "11/10/2018", "11/11/2018", 
"11/12/2018", "12/01/2018", "12/01/2019", "12/02/2018", "12/03/2018", 
"12/04/2018", "12/05/2018", "12/06/2018", "12/07/2018", "12/08/2018", 
"12/09/2018", "12/10/2018", "12/11/2018", "12/12/2018", "13/01/2018", 
"13/01/2019", "13/02/2018", "13/03/2018", "13/04/2018", "13/05/2018", 
"13/06/2018", "13/07/2018", "13/08/2018", "13/09/2018", "13/10/2018", 
"13/11/2018", "13/12/2018", "14/01/2018", "14/01/2019", "14/02/2018", 
"14/03/2018", "14/04/2018", "14/05/2018", "14/06/2018", "14/07/2018", 
"14/08/2018", "14/09/2018", "14/10/2018", "14/11/2018", "14/12/2018", 
"15/01/2018", "15/01/2019", "15/02/2018", "15/03/2018", "15/04/2018", 
"15/05/2018", "15/06/2018", "15/07/2018", "15/08/2018", "15/09/2018", 
"15/10/2018", "15/11/2018", "15/12/2018", "16/01/2018", "16/01/2019", 
"16/02/2018", "16/03/2018", "16/04/2018", "16/05/2018", "16/06/2018", 
"16/07/2018", "16/08/2018", "16/09/2018", "16/10/2018", "16/11/2018", 
"16/12/2018", "17/01/2018", "17/01/2019", "17/02/2018", "17/03/2018", 
"17/04/2018", "17/05/2018", "17/06/2018", "17/07/2018", "17/08/2018", 
"17/09/2018", "17/10/2018", "17/11/2018", "17/12/2018", "18/01/2018", 
"18/01/2019", "18/02/2018", "18/03/2018", "18/04/2018", "18/05/2018", 
"18/06/2018", "18/07/2018", "18/08/2018", "18/09/2018", "18/10/2018", 
"18/11/2018", "18/12/2018", "19/01/2018", "19/01/2019", "19/02/2018", 
"19/03/2018", "19/04/2018", "19/05/2018", "19/06/2018", "19/07/2018", 
"19/08/2018", "19/09/2018", "19/10/2018", "19/11/2018", "19/12/2018", 
"20/01/2018", "20/01/2019", "20/02/2018", "20/03/2018", "20/04/2018", 
"20/05/2018", "20/06/2018", "20/07/2018", "20/08/2018", "20/09/2018", 
"20/10/2018", "20/11/2018", "20/12/2017", "20/12/2018", "21/01/2018", 
"21/01/2019", "21/02/2018", "21/03/2018", "21/04/2018", "21/05/2018", 
"21/06/2018", "21/07/2018", "21/08/2018", "21/09/2018", "21/10/2018", 
"21/11/2018", "21/12/2017", "21/12/2018", "22/01/2018", "22/01/2019", 
"22/02/2018", "22/03/2018", "22/04/2018", "22/05/2018", "22/06/2018", 
"22/07/2018", "22/08/2018", "22/09/2018", "22/10/2018", "22/11/2018", 
"22/12/2017", "22/12/2018", "23/01/2018", "23/01/2019", "23/02/2018", 
"23/03/2018", "23/04/2018", "23/05/2018", "23/06/2018", "23/07/2018", 
"23/08/2018", "23/09/2018", "23/10/2018", "23/11/2018", "23/12/2017", 
"23/12/2018", "24/01/2018", "24/01/2019", "24/02/2018", "24/03/2018", 
"24/04/2018", "24/05/2018", "24/06/2018", "24/07/2018", "24/08/2018", 
"24/09/2018", "24/10/2018", "24/11/2018", "24/12/2017", "24/12/2018", 
"25/01/2018", "25/02/2018", "25/03/2018", "25/04/2018", "25/05/2018", 
"25/06/2018", "25/07/2018", "25/08/2018", "25/09/2018", "25/10/2018", 
"25/11/2018", "25/12/2017", "25/12/2018", "26/01/2018", "26/02/2018", 
"26/03/2018", "26/04/2018", "26/05/2018", "26/06/2018", "26/07/2018", 
"26/08/2018", "26/09/2018", "26/10/2018", "26/11/2018", "26/12/2017", 
"26/12/2018", "27/01/2018", "27/02/2018", "27/03/2018", "27/04/2018", 
"27/05/2018", "27/06/2018", "27/07/2018", "27/08/2018", "27/09/2018", 
"27/10/2018", "27/11/2018", "27/12/2017", "27/12/2018", "28/01/2018", 
"28/02/2018", "28/03/2018", "28/04/2018", "28/05/2018", "28/06/2018", 
"28/07/2018", "28/08/2018", "28/09/2018", "28/10/2018", "28/11/2018", 
"28/12/2017", "28/12/2018", "29/01/2018", "29/03/2018", "29/04/2018", 
"29/05/2018", "29/06/2018", "29/07/2018", "29/08/2018", "29/09/2018", 
"29/10/2018", "29/11/2018", "29/12/2017", "29/12/2018", "30/01/2018", 
"30/03/2018", "30/04/2018", "30/05/2018", "30/06/2018", "30/07/2018", 
"30/08/2018", "30/09/2018", "30/10/2018", "30/11/2018", "30/12/2017", 
"30/12/2018", "31/01/2018", "31/03/2018", "31/05/2018", "31/07/2018", 
"31/08/2018", "31/10/2018", "31/12/2017", "31/12/2018"), class = "factor"), 
    VL_PED_PG = c(30, 30, 30, 10, 10, 20, 30, 50, 10, 46.2, 20, 
    50, 22.8, 30, 50, 20, 30, 50, 10, 30, 10, 20, 30, 40, 15.2, 
    20, 20, 10, 20, 10, 10, 10, 40.03, 20, 8, 50, 10, 30, 30, 
    30, 10, 20, 50, 30, 20, 20, 10, 20, 30, 20)), row.names = c(NA, 
50L), class = "data.frame") 

2 answers

5

When importing the file csv include the argument stringAsFactors = FALSE, so your column with the dates will be read as character.

Then just apply the mutate as you are doing. Just note that as the year of your dates are "complete", the function argument as.Date must be "%d/%m/%Y".

  • Hi! How do I include stringAsFactors = FALSE ?

  • 1

    in reading the file, read.csv("arquivo.csv", header = T, ..., stringsAsFactors = FALSE)

  • Hello! I’m going to test.

5


I find the function as.Date quite bad. I often have problems with it and know not exactly how to solve. So I suggest using the package lubridate to work with dates. Instead of putting formats like "%d/%m/%y" to create date objects, the package lubridate has specific functions and quite intuitive to do this.

As your dates are in day, month and year format, the appropriate function of the lubridate to convert this values to date is dmy (day, Month, year):

library(lubridate)
dados_base$DT_PAGTO <- dmy(dados_base$DT_PAGTO)
is.Date(dados_base$DT_PAGTO)
[1] TRUE

Browser other questions tagged

You are not signed in. Login or sign up in order to post.