0

我有一个包含 700 万条记录的数据集。

我需要过滤数据以仅显示其中大约 9000 个。

第一个字段dmg实际上是主键,格式为 1-Apr-123456。每个dmg值大约出现 12 次。

另一列是O_Y,取值为 0 或 1。它通常为 0,但在大约 900 次情况下为 1。

我想返回所有具有相同dmg值的行,其中至少有一个记录具有并且O_Y值为 1。

4

1 回答 1

0

我建议使用data.table这样做(fread在 data.table 中读取大型数据集也非常方便,因为你说你有足够的 RAM)。

我不确定以下是在 data.table 中执行此操作的最佳方法,但至少它应该让您入门。希望其他人会出现并为此列出最惯用的 data.table 方式。但这是我现在能想到的:

假设您的 data.table 被调用DT并且有两列dmgO_Y. 用作(在data.table语法中)O_Y的索引键DT和子集。现在找到相应的值。这些值中的 是您的. 所有这一切都简洁地完成如下:DTO_Y == 1DT[.(1)]dmguniquedmgkeys.with.ones

setkey(DT, O_Y)
keys.with.ones <- unique(DT[.(1), dmg][["dmg"]])

接下来,我们需要提取与 的这些值对应的行dmg。为此,我们需要更改 to 的键DTdmg提取与上述键对应的行:

setkey(DT, dmg)
DT.filtered <- DT[.(keys.with.ones)]

我们完成了。:)

如果可能,请参考 ?data.table 找出更好的方法并告诉我们。

于 2013-05-14T22:34:51.870 回答