2014-05-10 41 views
-3

我有標記的合併的數據組,其具有一對不同的標題的刪除重複的行中,兩個主要的標題是idnumber1和idnumber2例如:ř編碼隨機

idnumber 1   idnumber2  agegroup  gender 
234700    46016   15   1 
234700    46014   15   1 
223914    46016   15   1 
223914    46014   15   1 
227296    46016   15   1 
227296    46014   15   1 
224170    46016   15   1 
224170    46014   15   1 
233531    46016   15   1 
233531    46014   15   1 

我有超過80萬的數據有更多的變量記錄,這就是我想要做的事: - 計數的數據行的個數N

  • 開始第1行(I = 1),不下一行有相同的idnumber1 ?如果是這樣,那麼下一行也,等等,直到你已經算行(k)的數量與這些k行相同idnumber1
  • 選擇一個讓
  • 生成0和1之間的隨機數(R) 。
  • 如果R < 1/K則保持第1行,否則如果R < 2/K然後繼續第2行,......否則如果r < = K/K然後繼續排鉀
  • 記錄備案idnumber2您將保留並刪除數據集中具有相同idnumber的所有其他行2
  • 還記錄所選記錄的相應列數據
  • 從行i(當前idnumber1的第一行)開始,到具有相同年齡組,性別等的最後一行開始,檢查此行的idnumber2是否與選定行相同,如果是,請刪除行
  • 完成一個選擇後,移動下一個idnumber1(現在是數據集中的第二行)並重復整個過程
+1

這個問題非常廣泛 - 到目前爲止您有什麼?什麼不起作用? –

+1

請發佈您已經嘗試過的產品,以及它在哪裏無法滿足您的要求。這不是一個你只是寫了一個規格的地方,而是有人爲你編程。我們在這裏幫助你學習。 – MrFlick

+0

我掙扎着開始,因爲我有一些重複的idnumber1,我只想保留一個,並刪除重複的其他所有內容。我知道我必須生成一個隨機數,但我不知道如何。我應該使用runif命令嗎? – user77158

回答

0

據我所知,您試圖隨機保留每行一個值在idnumber1。這可以通過拆分應用組合來完成:

set.seed(144) 
do.call(rbind, lapply(split(dat, dat$idnumber1), 
         function(x) x[sample(nrow(x), 1),])) 
#  idnumber1 idnumber2 agegroup gender 
# 223914 223914  46016  15  1 
# 224170 224170  46014  15  1 
# 227296 227296  46014  15  1 
# 233531 233531  46014  15  1 
# 234700 234700  46016  15  1