Stata has a command called compress
which looks through all the data rows and tries to coerce each to the most efficient format. For instance, if you have a bunch of integers stored as a character vector within a data.frame, it will coerce that to integer.
I can imagine how one might write such a function in R, but does it exist already?
Technically, read.table
does exactly that with the help of type.convert
. So you could use that - it is not the most efficient way but probably the easiest:
df <- as.data.frame(lapply(df ,function(x) type.convert(as.character(x))))
In practice it may be better to do that selectively, though, so you only touch characters/factors:
for (i in seq.int(df)) if (is.factor(df[[i]]) || is.character(df[[i]]))
df[[i]] <- type.convert(as.character(df[[i]]))
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