相当于Stata的`compress`命令?

问题描述:

Stata有一个名为compress的命令,它查看所有数据行,并试图强制每个数据行以最有效的格式。例如,如果在data.frame中有一堆作为字符向量存储的整数,它会将其强制为整数。相当于Stata的`compress`命令?

我可以想象如何在R中编写这样的函数,但它是否已经存在?

+2

编写代码可以很容易地测试整数和强制值,如果某些指定部分的值不是-NA,但我认为一般答案是“否”。 – 2012-02-20 01:00:48

+0

这也是我的想法。诀窍是编写高效的代码,以便它不会永远运行。正则表达式将是明显的开始,但可能太慢。 – 2012-02-20 01:32:48

+0

如果您要使用长度(水平(因子()))进行测试并将其转换为因子(如果该值小于载体的hte长度的20%),则可能会节省空间。同样,你可以检查看矢量的哪一部分vrc具有值== trunc(vec),它可能是一个测试,是否将数值强制为整数是明智的。我自己并没有看到正则表达式方法的很多适用性,但也许我再次钝了。 – 2012-02-20 02:28:04

从技术上讲,read.table正是在type.convert的帮助下完成的。所以,你可以使用 - 它是不是最有效的方式,但可能是最容易:

df <- as.data.frame(lapply(df ,function(x) type.convert(as.character(x)))) 

在实践中可能会更好做选择,虽然如此,你只能碰字符/因素:

for (i in seq.int(df)) if (is.factor(df[[i]]) || is.character(df[[i]])) 
    df[[i]] <- type.convert(as.character(df[[i]]))