2013-05-14 58 views
0

我有一个包含700万条记录的数据集。在R(复杂)中筛选数据

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

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

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

我想用相同的dmg价值,其中这些记录至少一个具有和1

+0

你可以将数据读入R(RAM)吗?如果没有,package'sqldf'可以完成任务。 – 2013-05-14 16:22:59

+7

[阅读此文](http://stackoverflow.com/q/5963269)为了学习如何提出一个好问题 – 2013-05-14 16:23:33

+0

喜欢这个?假设“0_Y”是第j列。 'FOO <-readLines(数据文件中,n = 1);如果foo [j] == 1 my.data <-rbind(my.data,foo)',并为此循环多条记录。 – 2013-05-14 18:13:30

回答

0

O_Y值我建议使用data.table在data.table意愿这样做(fread返回所有行在大型数据集中阅读也很方便,因为你说你有足够的RAM)。

我不确定以下是在data.table中执行此操作的最佳方法,但至少应该让您开始。希望别人会出现并列出最常用的data.table方法。但这是我现在可以想到的:

假设你的data.table被称为DT并且有两列dmgO_Y。使用O_Y作为DT和子集DT对于O_Y == 1DT[.(1)]以data.table语法)的索引键。现在找到相应的dmg值。这些dmg值中的unique是您的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找出一个更好的方法,如果可能的话,让我们知道。