过滤R中的数据(复杂)

时间:2013-05-14 16:20:10

标签: r dataset filtering

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

我需要过滤数据,只显示其中的9000个。

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

另一列是O_Y,取值为0或1.最常见的是0,但在大约900次时为1。

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

1 个答案:

答案 0 :(得分:0)

我建议使用data.table来执行此操作(data.table中的fread在读取大数据集时非常方便,因为你说你有足够的RAM。)

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

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

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

接下来,我们需要提取与dmg的这些值对应的行。为此,我们需要将DT的密钥更改为dmg并提取与上述密钥对应的行:

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

我们完成了。 :)

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