이 문서에는 코드 청크(밝은 회색 배경)와 설명 텍스트가 포함되어 있습니다. 이는 “Rmarkdown” 문서의 예시입니다. 문서 내에서 직접 코드를 작성하고 실행할 수 있으며, 결과는 각 코드 청크 바로 아래에 표시됩니다. 텍스트 지침에 따라 코드 청크를 수정하고 실행하여 원하는 출력을 생성해 보세요.
R에서는 데이터, 벡터, 리스트 등 다양한 유형의 객체(Object)를 사용하며, 여기에 함수(Function)를 적용하여 작업을 수행합니다. 함수의 기본 구조는 <함수_이름>(<인수1>=값, <인수2>=값) 입니다. 함수를 사용할 때 인수 이름을 생략하고 위치에 따라 인수를 전달할 수도 있습니다. 예를 들어 myFunction(foo, 1, "bar")에서 foo는 첫 번째 인수, 1은 두 번째 인수, "bar"는 세 번째 인수로 전달됩니다. R 학습 초기에는 가급적 인수 이름을 명시적으로 사용하는 것을 권장합니다. RStudio IDE의 탭 완성 기능을 활용하면 편리하며, 함수의 자세한 인수를 확인하려면 콘솔에 ?<함수이름>을 입력해 보세요.
미니 프로젝트 시작
먼저 tidyverse, rio, skimr, htmlTable 패키지를 로드합니다. 패키지는 사용 전 로드가 필요하며, 보통 스크립트 시작 부분에서 로드하는 것이 좋습니다. 코드 청크 오른쪽의 초록색 화살표를 클릭하여 실행하세요.
library(tidyverse)
Warning: package 'ggplot2' was built under R version 4.4.3
Warning: package 'tibble' was built under R version 4.4.3
Warning: package 'purrr' was built under R version 4.4.2
Warning: package 'lubridate' was built under R version 4.4.2
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.5.2 ✔ tibble 3.3.0
✔ lubridate 1.9.4 ✔ tidyr 1.3.1
✔ purrr 1.0.4
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(rio)library(skimr)library(htmlTable)
R에서 데이터를 읽어오는 방법은 다양합니다. haven 패키지의 read_xpt(), readr 패키지의 CSV/TSV 읽기 함수, readxl 패키지 등이 대표적입니다. 대부분의 함수는 첫 번째 인수로 데이터 경로를 사용합니다.
이 프로젝트에서는 rio 패키지를 사용합니다. rio는 파일 확장자를 통해 형식을 자동으로 판단하는 import() 함수를 제공하여 매우 편리합니다. GitHub의 ADSL 데이터를 읽어와 할당 연산자 <-를 사용해 객체에 저장해 보겠습니다.
adsl <-import(file ="./data/adsl.xpt")
adsl 객체의 상위 데이터를 확인하려면 객체 이름을 입력하거나 head() 함수를 사용합니다.
head(adsl)
STUDYID USUBJID SUBJID SITEID SITEGR1 ARM
1 CDISCPILOT01 01-701-1015 1015 701 701 Placebo
2 CDISCPILOT01 01-701-1023 1023 701 701 Placebo
3 CDISCPILOT01 01-701-1028 1028 701 701 Xanomeline High Dose
4 CDISCPILOT01 01-701-1033 1033 701 701 Xanomeline Low Dose
5 CDISCPILOT01 01-701-1034 1034 701 701 Xanomeline High Dose
6 CDISCPILOT01 01-701-1047 1047 701 701 Placebo
TRT01P TRT01PN TRT01A TRT01AN TRTSDT
1 Placebo 0 Placebo 0 2014-01-02
2 Placebo 0 Placebo 0 2012-08-05
3 Xanomeline High Dose 81 Xanomeline High Dose 81 2013-07-19
4 Xanomeline Low Dose 54 Xanomeline Low Dose 54 2014-03-18
5 Xanomeline High Dose 81 Xanomeline High Dose 81 2014-07-01
6 Placebo 0 Placebo 0 2013-02-12
TRTEDT TRTDUR AVGDD CUMDOSE AGE AGEGR1 AGEGR1N AGEU RACE RACEN SEX
1 2014-07-02 182 0.0 0 63 <65 1 YEARS WHITE 1 F
2 2012-09-01 28 0.0 0 64 <65 1 YEARS WHITE 1 M
3 2014-01-14 180 77.7 13986 71 65-80 2 YEARS WHITE 1 M
4 2014-03-31 14 54.0 756 74 65-80 2 YEARS WHITE 1 M
5 2014-12-30 183 76.9 14067 77 65-80 2 YEARS WHITE 1 F
6 2013-03-09 26 0.0 0 85 >80 3 YEARS WHITE 1 F
ETHNIC SAFFL ITTFL EFFFL COMP8FL COMP16FL COMP24FL DISCONFL
1 HISPANIC OR LATINO Y Y Y Y Y Y
2 HISPANIC OR LATINO Y Y Y N N N Y
3 NOT HISPANIC OR LATINO Y Y Y Y Y Y
4 NOT HISPANIC OR LATINO Y Y Y N N N Y
5 NOT HISPANIC OR LATINO Y Y Y Y Y Y
6 NOT HISPANIC OR LATINO Y Y Y N N N Y
DSRAEFL DTHFL BMIBL BMIBLGR1 HEIGHTBL WEIGHTBL EDUCLVL DISONSDT DURDIS
1 25.1 25-<30 147.3 54.4 16 2010-04-30 43.9
2 Y 30.4 >=30 162.6 80.3 14 2006-03-11 76.4
3 31.4 >=30 177.8 99.3 16 2009-12-16 42.8
4 28.8 25-<30 175.3 88.5 12 2009-08-02 55.3
5 26.1 25-<30 154.9 62.6 9 2011-09-29 32.9
6 Y 30.4 >=30 148.6 67.1 8 2009-07-26 42.0
DURDSGR1 VISIT1DT RFSTDTC RFENDTC VISNUMEN RFENDT
1 >=12 2013-12-26 2014-01-02 2014-07-02 12 2014-07-02
2 >=12 2012-07-22 2012-08-05 2012-09-02 5 2012-09-02
3 >=12 2013-07-11 2013-07-19 2014-01-14 12 2014-01-14
4 >=12 2014-03-10 2014-03-18 2014-04-14 5 2014-04-14
5 >=12 2014-06-24 2014-07-01 2014-12-30 12 2014-12-30
6 >=12 2013-01-22 2013-02-12 2013-03-29 6 2013-03-29
DCDECOD DCREASCD MMSETOT
1 COMPLETED Completed 23
2 ADVERSE EVENT Adverse Event 23
3 COMPLETED Completed 23
4 STUDY TERMINATED BY SPONSOR Sponsor Decision 23
5 COMPLETED Completed 21
6 ADVERSE EVENT Adverse Event 23
adsl 객체는 254행 48열로 구성되어 있습니다.
sapply 함수를 사용하여 각 열의 데이터 타입(character, numeric, factor 등)을 확인해 보겠습니다. class 함수는 객체의 타입을 알려줍니다.
USUBJID AGE AGEU SEX RACE ETHNIC TRT01A
1 01-701-1015 63 YEARS F WHITE HISPANIC OR LATINO Placebo
2 01-701-1023 64 YEARS M WHITE HISPANIC OR LATINO Placebo
3 01-701-1047 85 YEARS F WHITE NOT HISPANIC OR LATINO Placebo
4 01-701-1118 52 YEARS M WHITE NOT HISPANIC OR LATINO Placebo
5 01-701-1130 84 YEARS M WHITE NOT HISPANIC OR LATINO Placebo
6 01-701-1153 79 YEARS F WHITE NOT HISPANIC OR LATINO Placebo
이제 7개의 열만 남았습니다.
출력용 리스팅을 위해 열 이름을 알아보기 쉽게 변경합니다. names() 함수에 c() 함수로 만든 이름 벡터를 전달합니다.
Subject ID Age AgeUnits Sex Race Ethnicity Treatment
1 01-701-1015 63 YEARS F WHITE HISPANIC OR LATINO Placebo
2 01-701-1023 64 YEARS M WHITE HISPANIC OR LATINO Placebo
3 01-701-1047 85 YEARS F WHITE NOT HISPANIC OR LATINO Placebo
4 01-701-1118 52 YEARS M WHITE NOT HISPANIC OR LATINO Placebo
5 01-701-1130 84 YEARS M WHITE NOT HISPANIC OR LATINO Placebo
6 01-701-1153 79 YEARS F WHITE NOT HISPANIC OR LATINO Placebo
최종 결과물을 출력합니다. Rmarkdown에서는 객체 이름을 입력하는 것만으로도 보기 좋은 HTML 표가 생성됩니다.
head(adsl_eff_srt)
Subject ID Age AgeUnits Sex Race Ethnicity Treatment
1 01-701-1015 63 YEARS F WHITE HISPANIC OR LATINO Placebo
2 01-701-1023 64 YEARS M WHITE HISPANIC OR LATINO Placebo
3 01-701-1047 85 YEARS F WHITE NOT HISPANIC OR LATINO Placebo
4 01-701-1118 52 YEARS M WHITE NOT HISPANIC OR LATINO Placebo
5 01-701-1130 84 YEARS M WHITE NOT HISPANIC OR LATINO Placebo
6 01-701-1153 79 YEARS F WHITE NOT HISPANIC OR LATINO Placebo
외부 저장용으로 서식이 지정된 HTML 리스팅을 만들 때는 htmlTable 패키지 등을 활용할 수 있습니다. align 인수를 조정하여 정렬(l: 왼쪽, c: 중앙, r: 오른쪽)을 변경해 보세요.