Ari B. Friedman
Ari B. Friedman

Reputation: 72741

R equivalent to Stata's `compress` command?

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?

Upvotes: 10

Views: 1794

Answers (1)

Simon Urbanek
Simon Urbanek

Reputation: 13932

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

Upvotes: 8

Related Questions