[程式] R的資料替換

看板Statistics作者 (Syameroke)時間11年前 (2012/11/29 16:28), 編輯推噓1(109)
留言10則, 3人參與, 最新討論串1/1
---------------------------------------------------------------------- [軟體程式類別]: 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

11/29 16:32, , 1F
merge(A,B,all=T,by.x="X",by.y="Z") ; 這個拿去玩一玩
11/29 16:32, 1F

11/29 16:36, , 2F
不太懂...懇請詳解...
11/29 16:36, 2F

11/29 16:38, , 3F
可否講解下原理...
11/29 16:38, 3F

11/29 16:43, , 4F
A矩陣的X column 和 B矩陣的Z column,一樣的就融合
11/29 16:43, 4F

11/29 16:43, , 5F
兩個矩陣都要是 data.frame 物件
11/29 16:43, 5F

11/29 16:44, , 6F
融和完以後 再去做資料刪減與排序
11/29 16:44, 6F

11/29 16:45, , 7F
完全懂了,感謝你,從來沒想到merge可以這樣用
11/29 16:45, 7F

11/29 17:33, , 8F
用這個function要很小心 ASCII code 會造成很多問題
11/29 17:33, 8F

11/29 17:33, , 9F
細節就自己體會吧
11/29 17:33, 9F

11/29 18:57, , 10F
ASCII 容易有問題+1
11/29 18:57, 10F
文章代碼(AID): #1GjnoON8 (Statistics)