CodingButStillAlive
CodingButStillAlive

Reputation: 763

In R: Type conversion of data frames with mixed data types

I generally like R, but the type conversion issues are driving me crazy.

Following issue:

I read a data frame from a database connection. The result is a data frame with character columns.

I know that the first column is a date format - all the others are numeric. However, no matter how I tried to convert the character columns of the data frame into the correct types, it didn't work out.

Upon conversion of the data frame into a matrix and then back into a data frame, all columns became type factor - and casting factors into numerics created wrong results cause the indices of the factor levels were converted instead of the real values.

Moreover, if the table is big in size - I do not want to convert each column manually. Isn't there a way to get this done automatically?

Upvotes: 1

Views: 1503

Answers (1)

akrun
akrun

Reputation: 886948

We can use type.convert by looping over the columns of the dataset with lapply. Convert the columns to character and apply the type.convert. If it is is a character class, it will convert to factor which we can reconvert it to Date class (as there is only a single column with character class. It is not sure about the format of the 'Date' class, so in case it is a different format, specify the format argument in as.Date).

df1[] <- lapply(df1, function(x) {x1 <- type.convert(as.character(x))
                         if(is.factor(x1))
                             as.Date(x1) else x1})

Upvotes: 1

Related Questions