R相当于Stata';是“压缩”命令吗?

R相当于Stata';是“压缩”命令吗?,r,R,Stata有一个名为compress的命令,该命令查看所有数据行,并尝试将每个数据行强制为最有效的格式。例如,如果在data.frame中有一组整数存储为字符向量,它将强制将其转换为整数 我可以想象人们如何在R中编写这样一个函数,但它已经存在了吗?从技术上讲,read.table正是在type.convert的帮助下实现的。因此,您可以使用它-这不是最有效的方法,但可能是最简单的方法: df <- as.data.frame(lapply(df ,function(x) type.conv

Stata有一个名为
compress
的命令,该命令查看所有数据行,并尝试将每个数据行强制为最有效的格式。例如,如果在data.frame中有一组整数存储为字符向量,它将强制将其转换为整数


我可以想象人们如何在R中编写这样一个函数,但它已经存在了吗?

从技术上讲,
read.table
正是在
type.convert
的帮助下实现的。因此,您可以使用它-这不是最有效的方法,但可能是最简单的方法:

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

df编写测试整数性的代码会很容易,如果指定的部分值不是NA,则会强制执行,但我认为一般的答案是“否”。这也是我的想法。诀窍是编写高效的代码,这样就不会花很长时间运行。正则表达式显然是开始的方式,但可能太慢。如果要使用长度(levels(factor())进行测试并将其转换为因子iff,则该值小于向量长度的20%,也可能会节省空间。同样地,您可以检查向量的哪一部分vrc的值==trunc(vec),这可能是一个测试,用于测试将数字强制为整数是否明智。我自己并没有看到正则表达式方法的太多适用性,但也许我又一次迟钝了。@DWin因子在32位平台上总是比字符串节省空间。在64位平台上,对于较小的级别比率(由于
sizeof(SEXP)==2*sizeof(int)
),它们的效率更高,因此规则会因平台而异……(如果您想学究的话;))stata的“压缩”不会将字符数据类型转换为数字类型。它只会优化字符和数字数据类型中的存储。比方说,数字最多为10的变量将从浮点或双精度转换为“字节”数据类型(R不支持的一种非常方便的格式)。但是具有1到10个数字的字符变量将不会转换为数字
for (i in seq.int(df)) if (is.factor(df[[i]]) || is.character(df[[i]]))
    df[[i]] <- type.convert(as.character(df[[i]]))