Top

제  목    :    자료분석을 위한 데이터 결합과 변환 기초
작성자 관리자
등록일 2015년 11월 26일 14시 19분 16초 조회 1,289
자료를 수집한 뒤에도 실제 연구분석에 들어가기 위해서는 일단 자료를 분석이 용이한 형태로 변환하는 사전작업이 필수적이다. 이러한 자료 변환 과정은 실무적으로 매우 중요하지만 적절한 방법을 몰라서 많은 시간을 소모하는 경우가 흔하다. 오늘은 대표적으로 자주 사용하는 자료변환과정으로 테이블간의 결합 (Join) 방법과 wide format ←→ long format 형식의 변환에 대하여 설명해보겠다. 샘플자료파일과 함께 SPSS, R에서 각각 해당 과정을 어떻게 실행하지 기술하겠다.
 
 
I. 테이블간 결합
연구중 자료가 추가되는 일은 매우 빈번하게 발생한다. 임상연구의 경우 환자의 수가 늘어나는 경우도 있고, 새로운 변수가 관측값이 추가되는 경우도 있다. 일반적으로 자료를 정리할 경우 테이블 형태로 기록하는데 주로 행 (column)에 측정 변수값 (성별, 나이, 몸무게, 고혈압…)이 기록되고, 열 (row)에 각각의 환자나 케이스 (ID 1번환자, 2번환자…)가 기록된다. 만약 특정기간동안 환자의 자료를 모은 이후, 추가 기간동안의 환자가 새로 등록된다면 두개의 테이블을 결합할 경우 전체 자료의 행이 늘어나게 된다 (행 결합, row bind). 이와는 다르게 케이스의 추가가 아니라 새로운 변수값이 추가되는 경우도 있다 (열 결합, column bind). 만약 환자의 자료를 정리하다가, 추가로 입원시 체온자료를 추가해야 하는 경우를 가정해 보자. 병원 전산실에 신청하여 환자 ID별로 내원시 체온을 엑셀파일로 받았을 경우 기존 자료 테이블에 해당 정보를 결합시켜야 실제로 분석이 가능할 것이다. 간단한 파일들을 가지고 실제로 행결합, 열결합을 실습을 해보자.
 
1. SPSS로 시행하는 행결합
‘spss_form1.sav’라는 파일과 ‘spss_form2.sav’라는 SPSS용 첨부 자료파일을 사용한다 (게시판 첨부자료). 두 자료에는 각각 32명, 36명의 환자들에 관한 기본정보가 들어있다. 연구를 위하여 두 파일의 내용을 합쳐야 하는 상황이다. 적은 수의 자료라면 그냥 파일을 열어서 copy-paste하면 되겠지만 변수 숫자가 많거나 정리된 변수들의 순서가 서로 다를 경우에는 이러한 과정도 수월치 않다. 일단 ‘spss_form1.sav’파일에 ‘spss_form2.sav’의 내용을 추가해보자 (준비된 두파일을 살펴보면 변수들의 이름은 모두 같지만 변수가 나열된 순서는 서로 다르게 되어 있어 단순한 copy, paste는 용이하지 않다).

1) ‘spss_form1.sav’파일을 더블클릭하여 SPSS를 실행시킨 뒤 메뉴의 Data>Merge Files>Add Cases를 선택.
 
2) Add Cases 항목을 선택하면 아래처럼 추가할 SPSS파일을 고를 수 있는 창이 뜬다. 새로 추가하고자 하는 자료파일인 ‘spss_form2.sav’을 선택하고 Continue를 누른다.
 
3) 파일명을 제대로 선택했을 경우에는 아래처럼 두 파일의 공통된 변수명 (sex, age등) 들이 우측에 등장한다. 현재 두 파일의 변수명은 모두 일치하기 때문에 그대로 OK를 클릭하면 된다 (만약 한쪽 파일에만 등장하는 변수명이 있을 경우 해당 변수는 좌측의 Unpaired Variable에 나타나는데 해당 정보도 최종파일에 포함시키고 싶으면 우측으로 넘기는 화살표를 클릭하면 된다. 만약 포함시키지 않으면 해당 변수의 내용은 최종 파일에서 누락된다).
 
4) 제대로 실행했다면 결합된 테이블에는 총 68명의 환자가 등록되어 있다 (32+36행).
 
 
2. SPSS로 시행하는 열결합
위에서 얻은 자료에 추가적으로 각 환자별 추적 NIHSS점수와 thrombolysis시행여부에 관한 자료테이블 (‘spss_NIHSS.sav’)를 덧붙여 보자. 환자나 케이스를 추가하는 것이 아니라, 기존 환자들의 자료에 변수가 추가되는 것이기에 이전과 달리 열이 추가되는 경우이다 (column bind).

Column간의 결합을 보통 Join이라고 부르는데 A테이블의 정보와 B테이블의 정보가 있을 때 각각의 행 자료가 누구와 결합해야 하는지를 알려줄 이름표 (고유 ID로 사용될 변수. 각 환자의 정보는 같은 환자끼리 결합되어야 하므로)가 필요하다. 보통 등록번호나 case_no 등이 사용되는데 지금의 자료에서는 unit_no가 이에 해당한다. Join 작업을 위한 사전조건으로 이러한 ID들은 중복된 값이 없어야 하며 (중복값이 있으면 어디에 붙여야 하는지 혼란이 발생하므로 미리 삭제하거나 수정해 두어야 한다), SPSS에서는 해당변수를 기준으로 전체자료를 정렬 (Sorting) 해두는 사전과정이 필요하다. 앞서 ‘spss_form1.sav’, ‘spss_form2.sav’를 행결합했던 테이블을 가지고 열결합에 관한 실습을 이어나가겠다.

1) 사전 준비과정으로 ‘unit_no’ 열을 선택하고 우측버튼을 누르면 나오는 메뉴에서 Sort Ascending 를 선택하여 일단 정렬해준 뒤에 파일을 저장하여 ‘spss_form_12.sav’를 만들자. 추가로 결합시킬 자료도 ‘unit_no’기준으로 정렬과정이 필요한데 추가시킬 자료인 ‘spss_NIHSS.sav’파일은 이미 정렬해둔 상태이다.
 
2) 위 과정이 끝났으면 ‘spss_form_12.sav’ 파일을 열어둔 상태에서 메뉴의 Data > Merge Files > Add Variables를 선택.
 
3) 아래와 같은 창에서 열결합 시키고자 하는 데이터인 ‘spss_NIHSS.sav’파일을 선택하고 Continue.
 
4) 이제 현재 자료파일(‘spss_form12.sav’)과 추가로 덧붙일 자료파일 (‘spss_NIHSS.sav’)에서 결합의 기준으로 사용될 ID개념으로 ‘unit_no’를 선택해줘야 한다.
 
화면의 좌측란에 ‘unit_no’가 보이는데 두파일에 공통적으로 존재하는 변수이기 때문에 자동으로좌측화면에 등장한다. 결합의 기준ID로 선정하기 위하여 ‘unit_no’를 클릭하고 아래의 Match cases on key variables 체크, 바로 밑의 Cases are sorted in order of key variables in both datasets 체크, 이어서 Non-active dataset is keyed table을 선택해주자. 끝으로 ‘unit_no’가 선택된 상태에서 우측아래의 화살표를 골라서 Key variable이라는 항목에 ‘unit_no’가 들어가게 하면 된다 (화면에서 선택이 필요한 부분에는 빨간동그라미로 표시해 두었다). 아래는 모든 것이 제대로 선택되어 OK를 누리기 직전 화면이다.
 
5) OK를 누르면 기존의 테이블에 ‘spss_NIHSS.sav’에 들어있던 정보들이 ‘unit_no’에 맞추어 각 환자들의 자료 옆으로 추가된 것을 확인할 수 있다.

보통 열결합을 시행할 때 error가 나는 부분은 2가지인데, 기준값으로 사용되는 기준변수 (unit_no)에 중복값이 있을 경우 (어디에 붙여야 할지 모르므로), 또는 기준변수값으로 자료가 정렬 (sorting)이 되지 않은 상태에서 열결합을 시도하는 경우이다. 참고로 위에서 Non-active dataset is keyed table 로 고른 옵션은 A table 과 B table을 붙일 때 한쪽에 짝이 맞지 않는 자료가 있을 경우 어떻게 하겠느냐는 내용이다 (Non-active dataset을 선택하면 이미 열려있는 파일의 내용이 살아남고, Active dataset을 선택하면 추가로 연 파일의 내용이 살아남는다. Both는 양측을 살리는 경우).
 
 
II. Wide format -> Long format 변환
자료를 결합이 아니라 자료의 나열된 형태를 가로세로로 변경해야 하는 경우가 있다. 같은 자료임에도 밑으로 길게 나열된 경우 (long format) 와 가로로 길게 나열된 경우 (wide format)가 존재한다. 앞서 결합에 사용한 ‘spss_NIHSS.sav’ 가 wide format의 대표적인 경우이다 (환자의 자료가 가로로 넓게 나열되어 있으므로 wide format). 해당 자료(‘spss_NIHSS.sav’)를 반대로 wide long format 으로 변경 해보자.
 
[Wide format형태]
 
[Long format형태]
 
1) 앞에 사용한 파일은 모두 닫고 ‘spss_NIHSS.sav’를 SPSS에서 새로 실행시킨 상태에서 Data>Restructure 를 선택한다.
 
2) 세가지 선택 메뉴가 존재하는데 첫번째가 Wide Long format으로 변경하는 내용이다. 첫번째를 고르고 Next.
 
3) 옵션화면인데 그냥 첫번째를 선택하고 Next.
 
4) 현재 자료의 구성을 보면 ID로 사용될 ‘unit_no’가 있고, 두번째 변수는 혈전용해술 여부 (‘thrombolysis’), 3-6번째 변수 (NIHSS_1,2,3,4) 에는 NIHSS 점수를 4번 반복측정한 값이 존재한다. 우리의 목적은 반복측정된 NIHSS값을 한변수 (‘NIHSS’) 에 모두 넣고, 몇번째에 측정한 NIHSS값인지 관한 변수 (‘Index1’)을 새로 만들어 Long format으로 변환하는 것이다. 선택화면에서 Case Group identification에는 ID로서 작동할 변수를 넣는데 [Use selected variable]로 변경하고 그 밑에 ‘unit_no’이 오도록 선택해준다.
그 바로 아래쪽 창에는 반복측정된 변수들을 선택해주면 되는데 NIHSS_1,2,3,4가 한환자에서 반복측정된 변수값이므로 네변수 모두 선택해준다. Target Variable에는 이들 반복측정된 변수값의 대표로 사용할 변수이름을 지정해주는 것이므로 ‘NIHSS’라고 입력해주자 (다른 이름으로 입력해도 된다). 그 밑의 Fixed Variable 에는 ID도 아니고 변환될 변수도 아닌 고정된 나머지변수들을 선택하는 창이므로 아무 해당사항이 없는 ‘thrombolysis’ 변수를 선택해주고 Next.
 
5) 이후에는 옵션창인데 Next.
 
6) 아래 창에서 Index1 이라고 나온 변수명을 수정할 수 있는데 일단 그냥 두고 Finish를 누르겠다. 그러면 Long format으로의 변환이 완료된다.
 
7) 변환된 Long format 자료이다. 각 환자별로 NIHSS를 4번 측정하였기에 Index1에 몇번째 측정한 자료인지가 1,2,3,4로 표기되고 그때 각각의 점수가 ‘NIHSS’변수안에 기록되어 있다.
 
III. Long format -> Wide format 변환
1) 이번에는 거꾸로 Long format을 다시 Wide format으로 변경해보자. Long format으로 변경된 자료에서 다시 Data>Restructure 를 선택하고 화면에서 두번째 것을 선택하자 (화면의 그림예제를 보면 이해가 쉬울 것이다).
 
2) Identifier Variable (환자별 ID) 과 Index Variable (반복측정된 변수의 일렬번호)을 선택해야 하는데 현자료에서의 ‘unit_no’, ‘Index1’ 을 각각 선택한다.
 
3) 옵션화면이다 Next를 눌러도 되지만 그냥 Finish를 눌러 완료시키자.
 
4) 다시 Wide format으로 변경된 자료형태를 확인할 수 있다.
 
IV. R을 통한 변환작업
SPSS에서의 내용을 동일하게 처리하는 R코드 (rcode_dataformat.R) 을 첨부하였다. 참고로 R에서는 #이하의 문장은 주석으로 처리된다. R에 대한 기본적인 사용법은 알아야 실행이 가능할 것이다. 모든 R코드와 자료파일은 “C:/rdata/”폴더하에 넣어둔 것을 가정하였다. 행간 결합에는 rbind(), 열간 결합에는 merge()함수를 적용하였으며 Wide, Long format간의 변환에는 reshape() 함수를 적용하였다. R의 특성상 이외에도 매우 다양한 방법이 존재하므로 각자 더 편한 방법이 있다면 해당 방법을 사용하면 된다.
 
첨부파일1 자료.zip 자료.zip (다운63회)

답변

이 게시판은 회원 분들의 활성화를 위하여 정기적, 비정기적으로 연구와 관련된 tip 및 정보를 게시하는 곳입니다. 게시판 글의 작성은 뇌졸중학회 연구활성화위원회에서 맡고 있으며, 연구활동시 도움이 될만한 통계에 관한 도움말, 논문 작성법, 외부 홈페이지 소개 및 노하우 등 연구활동에 관한 전반적인 정보를 제공하고자 합니다. 기본적으로 월1회이상 정기적인 게시물이 작성될 예정이며 간단한 정보 등은 비정기적으로도 게시될 예정입니다. 만약 회원분들 중에서 연구와 관련하여 게시되었으면 하는 내용이 있을 경우에는 rsstrokeorkr@gmail.com 으로 메일을 주시면 가능한 참조하도록 하겠습니다.
번호 제목 작성자 조회 ↓ 등록일
9 9, 10월에 교육자료실에 업로드된 VOD 정보 관리자 526 2016-11-10
8 임상연구에서 사용되는 통계기법이 소개된 홈페이지 관리자 455 2016-11-10
7 임상 연구 설계 및 분석의 첫 걸음 03: 단변량 분석 관리자 1,285 2016-01-04
6 자료분석을 위한 데이터 결합과 변환 기초 관리자 1,289 2015-11-26
5 R에 처음 접근하기 어려운 분들을 위한 EZR 소개 관리자 6,593 2015-09-24
4 임상 연구 설계 및 분석의 첫 걸음 02: 대상 선정과 Databa... 관리자 1,302 2015-08-27
3 통계프로그램 R 소개 및 설치법, Web-based R강좌 소개 관리자 3,705 2015-07-23
2 임상 연구 설계 및 분석의 첫 걸음 01: Research Questio... 관리자 1,790 2015-06-24
1 Net Reclassification Index (NRI) & Integrated Discrimi... 관리자 3,960 2015-05-26

작성 목록

Gets the previous 10 pages. Go to previous page. [1] Go to next page. Gets the next  10 pages.



대한뇌졸중학회
VeriSign