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
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]]))