如何在R中减小数据的大小?

5
我有一个CSV文件,它有600,000行和1339列,总大小为1.6 GB。其中1337列是二进制列,只取值为1或0,而其他2列是数字和字符变量。
我使用readr包并使用以下代码提取数据:
VLU_All_Before_Wide <- read_csv("C:/Users/petas/Desktop/VLU_All_Before_Wide_Sample.csv")

当我使用以下代码检查对象大小时,它约为3GB。
> print(object.size(VLU_All_Before_Wide),units="Gb")
3.2 Gb

在下一步中,我将使用以下代码为LASSO回归创建训练集和测试集。
set.seed(1234)
train_rows <- sample(1:nrow(VLU_All_Before_Wide), .7*nrow(VLU_All_Before_Wide))

train_set <- VLU_All_Before_Wide[train_rows,]
test_set <- VLU_All_Before_Wide[-train_rows,]

yall_tra <- data.matrix(subset(train_set, select=VLU_Incidence))
xall_tra <- data.matrix(subset(train_set, select=-c(VLU_Incidence,Replicate)))
yall_tes <- data.matrix(subset(test_set, select=VLU_Incidence))
xall_tes <- data.matrix(subset(test_set, select=-c(VLU_Incidence,Replicate)))

当我启动R会话时,RAM占用约为3 gb,执行完以上所有代码后,现在已达到14 gb,导致出现错误提示,无法分配大小为4 gb的向量。除了3个Chrome窗口外,没有其他应用程序在运行。我删除了原始数据集、训练和测试数据集,但只减少了0.7至1 gb RAM。

rm(VLU_All_Before_Wide)
rm(test_set)
rm(train_set)

希望有人能指导我如何减小数据的大小。

谢谢。


1
你需要所有的列吗?你可以使用data.table包中的fread函数来选择你想要导入的列。 - MatthewR
实际上,我有约2,000个变量,我排除了出现次数少于15次的列,因为统计学家在任何统计分析中使用至少15次的计数作为经验法则。我还不确定所有其他变量是否具有预测性。 - petax004
1个回答

3

当处理大规模数据时,R语言容易遇到问题,因为它试图将所有数据加载并保存到内存中。您可以使用其他可用于处理大型数据集的R软件包,例如'bigmemory'和'ff'。请查看我在这里给出的答案,其中涉及类似的问题。

您还可以选择在R之外进行一些数据处理和操作,并删除不必要的列和行。但是,为了处理大型数据集,最好使用功能强大的软件包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接