I have a mixed class dataframe (numeric and factor) where I am trying to convert the entire data frame to numeric. The following illustrates the type of data I am working with as well as the problem I am encountering:
> a = as.factor(c(0.01,0.02,0.03,0.04))
> b = c(2,4,5,7)
> df1 = data.frame(a,b)
> class(df1$a)
[1] "factor"
> class(df1$b)
[1] "numeric"
When I try and convert the entire data frame to numeric, it alters the numeric values. For example:
> df2 = as.data.frame(sapply(df1, as.numeric))
> class(df2$a)
[1] "numeric"
> df2
a b
1 1 2
2 2 4
3 3 5
4 4 7
Previous posts on this site suggest using as.numeric(as.character(df1$a))
, which works great for one column. However, I need to apply this approach to a dataframe that may contain hundreds of columns.
What are my options for converting an entire dataframe from factor to numeric, while preserving the numeric decimal values?
The following is the output I would like to produce where a
and b
are numeric:
a b
1 0.01 2
2 0.02 4
3 0.03 5
4 0.04 7
I have read the following related posts, although none of them apply directly to this case:
- How to convert a factor variable to numeric while preserving the
numbers in R This references a single column in a dataframe.
- converting from a character to a numeric data frame. This post
does not take into account decimal values.
- How can i convert a factor column that contains decimal numbers to
numeric?. This applies to only one column in a data frame.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…