作者ching0629 (Syameroke)
看板Statistics
標題[程式] R的資料替換
時間Thu Nov 29 16:28:06 2012
----------------------------------------------------------------------
[軟體程式類別]:
R
[程式問題]:
資料整理
[軟體熟悉度]:
中(3個月到1年)
[問題敘述]:
手上有一個資料的替換表(Excel格式),先姑且較做A資料表,有兩個變數,分別是X(健保碼)
以及Y(ATC code)
另外資料的原始檔,先叫做B好了,有一個變數名稱是Z(健保碼),我需要將Z這個變數,利用A
資料表提供的資訊,將所有相應的Z(健保碼)轉換成Y(ATC code)
我已經爬過版上之前的文章了,也做了一些的嘗試,但我發現之前文章所示範程式碼僅能處
理X為1,2,3,4的資料
[程式範例]:
輸入資料的部分(以模擬資料為例):
A=data.frame(c("AAA","BBB","CCC","ABC"),c("A01","B01","C01","A02"))
names(A)=c("X","Y")
B=data.frame(c("00001","00002","00003","00004","00005"),c("DDD","BBB","AAA","CCC","BBB"))
names(B)=c("ID","Z")
在此階段已有兩個資料夾分別為A以及B
A:
X Y
1 AAA A01
2 BBB B01
3 CCC C01
4 ABC A02
B:
ID Z
1 00001 DDD
2 00002 BBB
3 00003 AAA
4 00004 CCC
5 00005 BBB
我的目標有兩個(兩者擇一應該就可以了)
第一個目標:直接將B變成以下的樣子
B:
ID Z Z_new
1 00001 DDD <NA>
2 00002 BBB B01
3 00003 AAA A01
4 00004 CCC C01
5 00005 BBB B01
第二個目標:將A資料表變成這樣
A:
Y
AAA A01
BBB B01
CCC C01
如果達成第二個目標,似乎就可以使用下面這個程式碼達到第一個目標:
B$Z_new=A$Y[B$Z]
我現在已經大概可以理解上述程式碼的功用了,大概就是將A$Y視為一個函數,將第一個B$Z
中的第一個factor轉變成A01,第二個factor轉變成B01,依此類推
但由於我手上的A資料比B資料有更多東西,因此若先將X排序也沒有辦法
懇請各位大大幫我解惑,感恩!
-----------------------------------------------------------------------------
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.60.122.8
1F:→ gsuper:merge(A,B,all=T,by.x="X",by.y="Z") ; 這個拿去玩一玩 11/29 16:32
2F:→ ching0629:不太懂...懇請詳解... 11/29 16:36
3F:→ ching0629:可否講解下原理... 11/29 16:38
4F:→ gsuper:A矩陣的X column 和 B矩陣的Z column,一樣的就融合 11/29 16:43
5F:→ gsuper:兩個矩陣都要是 data.frame 物件 11/29 16:43
6F:→ gsuper:融和完以後 再去做資料刪減與排序 11/29 16:44
7F:→ ching0629:完全懂了,感謝你,從來沒想到merge可以這樣用 11/29 16:45
8F:→ gsuper:用這個function要很小心 ASCII code 會造成很多問題 11/29 17:33
9F:→ gsuper:細節就自己體會吧 11/29 17:33
10F:推 sleepingbaby:ASCII 容易有問題+1 11/29 18:57