我有一个包含700万条记录的数据集。
我需要过滤数据,只显示其中的9000个。
第一个字段dmg
实际上是主键,格式为1-Apr-123456。每个dmg
值大约有12次出现。
另一列是O_Y
,取值为0或1.最常见的是0,但在大约900次时为1。
我想返回具有相同dmg
值的所有行,其中至少有一个记录的值为O_Y
且值为{。
答案 0 :(得分:0)
我建议使用data.table
来执行此操作(data.table中的fread
在读取大数据集时非常方便,因为你说你有足够的RAM。)
我不确定以下是在data.table中执行此操作的最佳方法,但至少它应该让您入门。希望,其他人会出现并列出最惯用的数据。可行的方式。但这就是我现在能想到的:
假设您的data.table名为DT
,并且有两列dmg
和O_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以找出更好的方法并告诉我们。