【发布时间】:2020-07-31 23:09:27
【问题描述】:
我有一个如下所示的医疗数据集:
patient_id disease_id
1111111111 DISEASE:1
1111111111 DISEASE:2
1111111111 DISEASE:3
1111111111 DISEASE:4
1111111111 DISEASE:5
1111111111 DISEASE:6
1111111111 DISEASE:6
1111111112 DISEASE:1
1111111112 DISEASE:2
1111111112 DISEASE:4
1111111113 DISEASE:1
1111111113 DISEASE:5
我需要将其输入神经网络/随机森林模型。因此,我想到的唯一可以输入模型的自然数据表示是:
patient_id DISEASE:1 DISEASE:2 DISEASE:3 DISEASE:4 DISEASE:5 DISEASE:6 ...
11111111111 1 1 1 1 1 1 ...
11111111112 1 1 0 1 0 0 ...
11111111113 1 0 0 0 1 0 ...
但是我的数据集非常大(~50GB,1.5GB 压缩)并且有大量的disease_ids,因此在 R 中以最有效的方式重塑这些数据需要 11.7TB 的压缩空间 /em> RDs 格式(我知道这一点是因为我将数据集划分为 100 个块,并且对单个块进行整形会产生 117 GB 的重 RDs 文件;合并其中的 100 个会产生大于 11.7TB 的东西)。
现在,我有 5 个这么大的数据集需要合并在一起,所以我觉得有点卡住了。我需要提出更有效的数据表示,但不知道如何处理需要 1-hot 编码的分类变量。任何人都可以提出任何替代方法来处理这样的数据。
【问题讨论】:
-
你可以试试
data.table, 1)setDT(df)2)df[, n := 1]3)dcast(unique(df), patient_id~ disease_id, value.var = "n", fill = 0)但是有这么大的数据我怀疑它是否会有帮助。 -
这是一些非常大的数据。我认为您需要从最终目标入手。
-
data.table 库没用。使用 dcast 会出现
free(): invalid pointer错误。 -
宽格式数据会有很多零吗?如果是,请考虑基本包
Matrix稀疏矩阵功能。 -
@RuiBarradas 我认为您可以通过设置 drop=TRUE 来获得稀疏的数据帧,即使散布也是如此,但这并不奏效。
标签: r dataframe bigdata out-of-memory