作者XYH (斐娟粉絲>//<)
看板Statistics
標題[程式] R語言中ID排序編號
時間Tue Jan 25 19:11:36 2011
[軟體程式類別]:
R
[程式問題]:
資料處理
[軟體熟悉度]:
高(1年以上)
[問題敘述]:
小弟最近在處理醫院病歷資料時,
因為有需要對ID進行比較,
並產生新ID,
可是因為原ID是加密過後的檔案為32字元每次比較均須相當多的時間,
故光是這個步驟可能就會耗時數週。
小弟發現,
如果能夠善用R內建的函式,
相關運作能省很多的時間。
譬如我本來也用比較ID去剔除相同之ID,
後發現用duplicated函數可以將原有數天的工作,
壓縮至一分鐘內完成。
下述的程式碼雖可以執行,
可是至少要一星期以上方能完成。
因此想請教大家有沒有更快的方式?
資料大致如下:
-----------------------------------
原有ID 診斷碼 擬創造新ID
ABCDEQ 295 1
ABCDEQ 001 1
ABCDEQ 005 1
DDWWSWW 420 2
DDWWSWW 538 2
DDWWSWW 292 2
KKQZZAQ 141 3
KKQZZAQ 141 3
.
.
.
[程式範例]:
原有資料代號為CD
NewID<-c(1) #第一個ID為1
for(i in 2: 100) #假定100筆病歷
{
if(CD[i,1]==CD[i-1,1]) #若該ID與前一個ID相同
{
NewID[i]<-NewID[i-1] #則NewID[i]與前個NewID元素
} #相同,
else
{
NewID[i]<-NewID[i-1]+1 #反之代號增加
}
}
-----------------------------------------------------------------------------
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.64.84.219
推 memphis:不要用R做 進sql去index 01/25 19:40
→ lin15:as.factor(id) 01/25 20:25
我測過,
factor似乎更久= =
※ 編輯: XYH 來自: 203.64.84.219 (01/25 20:34)
→ lin15:unique會比較快嗎? 01/25 20:44
→ XYH:不太懂可不可以說詳細點unique? 01/25 20:45
→ lin15:unique(id)下seq後再merge回來 不過我猜應該是用sql比較好.. 01/25 20:49
→ XYH:似乎有點希望,回去試試 01/25 20:51
→ bmka:sort by id 之後, 01/25 20:58
→ bmka:foo <- as.vector( table(id) ) 01/25 20:59
→ bmka:newid <- rep( 1: length(foo), foo) 01/25 20:59
→ bmka:就可以了,我自己常用的小伎倆 01/25 21:00
推 gsuper:可以問一下有幾筆資料嗎? 很好奇怎麼會跑這麼久 01/25 22:18
→ XYH:其實那是全民健保的資料,大概7000萬筆吧....... 01/25 22:26