我有一個包含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