2013-05-14 64 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找出一個更好的方法,如果可能的話,讓我們知道。