Convert a column from a Factor to a Data in a Dataframe

Hi I was wondering if someone could help me figure out how to convert a column in a data frame that is a factor into a Date (%y/%m/%d)

str(full_data_1)
'data.frame':	36 obs. of  5 variables:
 $ id       : chr  "123A" "123A" "123A" "123A" ...
 $ Date     : Date, format: NA NA ...
 $ usage    : num  10 12 40 20 11 20 30 20 16 15 ...
 $ treatment: num  0 0 0 0 0 0 0 0 0 0 ...
 $ Gender   : Factor w/ 2 levels "Female","Male": 2 2 2 2 2 2 2 2 2 2 ...

Currently This is what I am using and I keep getting NA when doing so.
full_data_1$Date<-as.Date(as.character(full_data_1$Date),format = "%m/%d/%Y")

Your method works from me.
Can you post the output of

dput(head(full_data_1))

Here is the test code I used to replicate your method.

DF <- data.frame(Date=c("9/3/1976","9/4/1976",  "9/5/1976"))
str(DF)
#> 'data.frame':    3 obs. of  1 variable:
#>  $ Date: Factor w/ 3 levels "9/3/1976","9/4/1976",..: 1 2 3
DF$Date <- as.Date(as.character(DF$Date), format = "%m/%d/%Y")
str(DF)
#> 'data.frame':    3 obs. of  1 variable:
#>  $ Date: Date, format: "1976-09-03" "1976-09-04" ...

Created on 2020-07-24 by the reprex package (v0.2.1)

@MaiCabrera - Is that the result from full_data_1 before you try the date conversion? The Date column is already NA. Please post the result using the data before you attempt the conversion.

@FJCC my bad! Thank you for the clarification! this is what the df is before the date conversion.

str(full_data_1)
'data.frame':	36 obs. of  5 variables:
 $ id       : chr  "123A" "123A" "123A" "123A" ...
 $ Date     : Factor w/ 12 levels "2018-01-01","2018-02-01",..: 1 10 6 2 11 7 3 12 8 4 ...
 $ usage    : num  10 12 40 20 11 20 30 20 16 15 ...
 $ treatment: num  0 0 0 0 0 0 0 0 0 0 ...
 $ Gender   : Factor w/ 2 levels "Female","Male": 2 2 2 2 2 2 2 2 2 2 ...

and this is after the conversion

str(full_data_1)
'data.frame':	36 obs. of  5 variables:
 $ id       : chr  "123A" "123A" "123A" "123A" ...
 $ Date     : Date, format: NA NA ...
 $ usage    : num  10 12 40 20 11 20 30 20 16 15 ...
 $ treatment: num  0 0 0 0 0 0 0 0 0 0 ...
 $ Gender   : Factor w/ 2 levels "Female","Male": 2 2 2 2 2 2 2 2 2 2 ...

The format of your date in the raw file is %Y-%m-%d. Try

DF$Date <- as.Date(as.character(DF$Date), format = "%Y-%m-%d")

In fact, the format argument is not even necessary in this case but I would probably use it just for clarity.

1 Like

THANK YOU SOOOOO MUCH :pray:

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.

This is the result I get:

> dput(head(full_data_1))
structure(list(id = c("123A", "123A", "123A", "123A", "123A", 
"123A"), Date = structure(c(NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_), class = "Date"), usage = c(10, 12, 40, 20, 
11, 20), treatment = c(0, 0, 0, 0, 0, 0), Gender = structure(c(2L, 
2L, 2L, 2L, 2L, 2L), .Label = c("Female", "Male"), class = "factor")), row.names = c(NA, 
6L), class = "data.frame")
library(data.table)
> DF <- data.table(Date=c("9/3/1976","9/4/1976",  "9/5/1976"),stringsAsFactors = TRUE)
> str(DF)
Classes ‘data.table’ and 'data.frame':	3 obs. of  1 variable:
 $ Date: Factor w/ 3 levels "9/3/1976","9/4/1976",..: 1 2 3
 - attr(*, ".internal.selfref")=<externalptr> 
> DF[,Date :=as.Date(as.character(DF$Date), format = "%m/%d/%Y"),]
> str(DF)
Classes ‘data.table’ and 'data.frame':	3 obs. of  1 variable:
 $ Date: Date, format: "1976-09-03" "1976-09-04" "1976-09-05"
 - attr(*, ".internal.selfref")=<externalptr> 

What you saw was actually the result after I ran the date conversion. Hence why I am stumped as to why it still shows as NA

I cannot try to debug the problem unless I see the data before you attempt the conversion.