我有一个包含700万条记录的数据集。在R(复杂)中筛选数据
我需要过滤数据,只显示其中约9000个。
第一个字段dmg
实际上是主键,格式为1-Apr-123456。每个dmg
值大约有12次出现。
另一列是O_Y
,取值为0或1.它通常是0,但在大约900次的情况下是1。
我想用相同的dmg
价值,其中这些记录至少一个具有和1
我有一个包含700万条记录的数据集。在R(复杂)中筛选数据
我需要过滤数据,只显示其中约9000个。
第一个字段dmg
实际上是主键,格式为1-Apr-123456。每个dmg
值大约有12次出现。
另一列是O_Y
,取值为0或1.它通常是0,但在大约900次的情况下是1。
我想用相同的dmg
价值,其中这些记录至少一个具有和1
O_Y
值我建议使用data.table
在data.table意愿这样做(fread
返回所有行在大型数据集中阅读也很方便,因为你说你有足够的RAM)。
我不确定以下是在data.table中执行此操作的最佳方法,但至少应该让您开始。希望别人会出现并列出最常用的data.table方法。但这是我现在可以想到的:
假设你的data.table被称为DT
并且有两列dmg
和O_Y
。使用O_Y
作为DT
和子集DT
对于O_Y == 1
(DT[.(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找出一个更好的方法,如果可能的话,让我们知道。
你可以将数据读入R(RAM)吗?如果没有,package'sqldf'可以完成任务。 – 2013-05-14 16:22:59
[阅读此文](http://stackoverflow.com/q/5963269)为了学习如何提出一个好问题 – 2013-05-14 16:23:33
喜欢这个?假设“0_Y”是第j列。 'FOO <-readLines(数据文件中,n = 1);如果foo [j] == 1 my.data <-rbind(my.data,foo)',并为此循环多条记录。 – 2013-05-14 18:13:30