作者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