我有一个包含 700 万条记录的数据集。
我需要过滤数据以仅显示其中大约 9000 个。
第一个字段dmg
实际上是主键,格式为 1-Apr-123456。每个dmg
值大约出现 12 次。
另一列是O_Y
,取值为 0 或 1。它通常为 0,但在大约 900 次情况下为 1。
我想返回所有具有相同dmg
值的行,其中至少有一个记录具有并且O_Y
值为 1。
我建议使用data.table
这样做(fread
在 data.table 中读取大型数据集也非常方便,因为你说你有足够的 RAM)。
我不确定以下是在 data.table 中执行此操作的最佳方法,但至少它应该让您入门。希望其他人会出现并为此列出最惯用的 data.table 方式。但这是我现在能想到的:
假设您的 data.table 被调用DT
并且有两列dmg
和O_Y
. 用作(在data.table语法中)O_Y
的索引键DT
和子集。现在找到相应的值。这些值中的 是您的. 所有这一切都简洁地完成如下:DT
O_Y == 1
DT[.(1)]
dmg
unique
dmg
keys.with.ones
setkey(DT, O_Y)
keys.with.ones <- unique(DT[.(1), dmg][["dmg"]])
接下来,我们需要提取与 的这些值对应的行dmg
。为此,我们需要更改 to 的键DT
并dmg
提取与上述键对应的行:
setkey(DT, dmg)
DT.filtered <- DT[.(keys.with.ones)]
我们完成了。:)
如果可能,请参考 ?data.table 找出更好的方法并告诉我们。