作者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
1F:推 memphis:不要用R做 进sql去index 01/25 19:40
2F:→ lin15:as.factor(id) 01/25 20:25
我测过,
factor似乎更久= =
※ 编辑: XYH 来自: 203.64.84.219 (01/25 20:34)
3F:→ lin15:unique会比较快吗? 01/25 20:44
4F:→ XYH:不太懂可不可以说详细点unique? 01/25 20:45
5F:→ lin15:unique(id)下seq後再merge回来 不过我猜应该是用sql比较好.. 01/25 20:49
6F:→ XYH:似乎有点希望,回去试试 01/25 20:51
7F:→ bmka:sort by id 之後, 01/25 20:58
8F:→ bmka:foo <- as.vector( table(id) ) 01/25 20:59
9F:→ bmka:newid <- rep( 1: length(foo), foo) 01/25 20:59
10F:→ bmka:就可以了,我自己常用的小伎俩 01/25 21:00
11F:推 gsuper:可以问一下有几笔资料吗? 很好奇怎麽会跑这麽久 01/25 22:18
12F:→ XYH:其实那是全民健保的资料,大概7000万笔吧....... 01/25 22:26