데이터셋 읽기 및 탐색

Author

Mike K Smith

Published

August 2, 2023

목표

  • ADSL xpt 데이터셋 읽기
  • 유효성 분석 대상군(Efficacy Population) 서브셋 추출
  • 데이터 정렬
  • 인구통계 리스팅 (Listing) 확인

이 문서 사용법

이 문서에는 코드 청크(밝은 회색 배경)와 설명 텍스트가 포함되어 있습니다. 이는 “Rmarkdown” 문서의 예시입니다. 문서 내에서 직접 코드를 작성하고 실행할 수 있으며, 결과는 각 코드 청크 바로 아래에 표시됩니다. 텍스트 지침에 따라 코드 청크를 수정하고 실행하여 원하는 출력을 생성해 보세요.

데이터 소스

이 프로젝트에서는 익명화된 CDISC 데이터셋을 사용합니다. 데이터는 다음 위치에서 찾을 수 있습니다: https://github.com/phuse-org/phuse-scripts/tree/master/data/adam/cdisc

R 객체와 함수

R에서는 데이터, 벡터, 리스트 등 다양한 유형의 객체(Object)를 사용하며, 여기에 함수(Function)를 적용하여 작업을 수행합니다. 함수의 기본 구조는 <함수_이름>(<인수1>=값, <인수2>=값) 입니다. 함수를 사용할 때 인수 이름을 생략하고 위치에 따라 인수를 전달할 수도 있습니다. 예를 들어 myFunction(foo, 1, "bar")에서 foo는 첫 번째 인수, 1은 두 번째 인수, "bar"는 세 번째 인수로 전달됩니다. R 학습 초기에는 가급적 인수 이름을 명시적으로 사용하는 것을 권장합니다. RStudio IDE의 탭 완성 기능을 활용하면 편리하며, 함수의 자세한 인수를 확인하려면 콘솔에 ?<함수이름>을 입력해 보세요.

미니 프로젝트 시작

  1. 먼저 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)
  1. R에서 데이터를 읽어오는 방법은 다양합니다. haven 패키지의 read_xpt(), readr 패키지의 CSV/TSV 읽기 함수, readxl 패키지 등이 대표적입니다. 대부분의 함수는 첫 번째 인수로 데이터 경로를 사용합니다.

이 프로젝트에서는 rio 패키지를 사용합니다. rio는 파일 확장자를 통해 형식을 자동으로 판단하는 import() 함수를 제공하여 매우 편리합니다. GitHub의 ADSL 데이터를 읽어와 할당 연산자 <-를 사용해 객체에 저장해 보겠습니다.

adsl <- import(file = "./data/adsl.xpt")
  1. 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열로 구성되어 있습니다.

  1. sapply 함수를 사용하여 각 열의 데이터 타입(character, numeric, factor 등)을 확인해 보겠습니다. class 함수는 객체의 타입을 알려줍니다.
sapply(X = adsl, FUN = class)
    STUDYID     USUBJID      SUBJID      SITEID     SITEGR1         ARM 
"character" "character" "character" "character" "character" "character" 
     TRT01P     TRT01PN      TRT01A     TRT01AN      TRTSDT      TRTEDT 
"character"   "numeric" "character"   "numeric"      "Date"      "Date" 
     TRTDUR       AVGDD     CUMDOSE         AGE      AGEGR1     AGEGR1N 
  "numeric"   "numeric"   "numeric"   "numeric" "character"   "numeric" 
       AGEU        RACE       RACEN         SEX      ETHNIC       SAFFL 
"character" "character"   "numeric" "character" "character" "character" 
      ITTFL       EFFFL     COMP8FL    COMP16FL    COMP24FL    DISCONFL 
"character" "character" "character" "character" "character" "character" 
    DSRAEFL       DTHFL       BMIBL    BMIBLGR1    HEIGHTBL    WEIGHTBL 
"character" "character"   "numeric" "character"   "numeric"   "numeric" 
    EDUCLVL    DISONSDT      DURDIS    DURDSGR1    VISIT1DT     RFSTDTC 
  "numeric"      "Date"   "numeric" "character"      "Date" "character" 
    RFENDTC    VISNUMEN      RFENDT     DCDECOD    DCREASCD     MMSETOT 
"character"   "numeric"      "Date" "character" "character"   "numeric" 
  1. 개별 변수의 타입을 확인하려면 is.numeric(), is.character() 등을 사용합니다. 특정 열을 참조할 때는 <객체>$<변수> 형식을 사용합니다.

중요: R은 대소문자를 구분(Case-sensitive)합니다! “AGE”와 “age”는 서로 다른 변수로 인식됩니다. SAS 데이터셋의 변수명은 주로 대문자임을 유의하세요.

is.numeric(adsl$AGE)
[1] TRUE
is.character(adsl$RACE)
[1] TRUE
  1. skimr 패키지의 skim() 함수는 데이터의 요약 정보(행/열 개수, 결측치, 타입별 분포 등)를 빠르게 보여줍니다.
skim(data = adsl)
Data summary
Name adsl
Number of rows 254
Number of columns 48
_______________________
Column type frequency:
character 28
Date 5
numeric 15
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
STUDYID 0 1 12 12 0 1 0
USUBJID 0 1 11 11 0 254 0
SUBJID 0 1 4 4 0 254 0
SITEID 0 1 3 3 0 17 0
SITEGR1 0 1 3 3 0 11 0
ARM 0 1 7 20 0 3 0
TRT01P 0 1 7 20 0 3 0
TRT01A 0 1 7 20 0 3 0
AGEGR1 0 1 3 5 0 3 0
AGEU 0 1 5 5 0 1 0
RACE 0 1 5 32 0 3 0
SEX 0 1 1 1 0 2 0
ETHNIC 0 1 18 22 0 2 0
SAFFL 0 1 1 1 0 1 0
ITTFL 0 1 1 1 0 1 0
EFFFL 0 1 1 1 0 2 0
COMP8FL 0 1 1 1 0 2 0
COMP16FL 0 1 1 1 0 2 0
COMP24FL 0 1 1 1 0 2 0
DISCONFL 0 1 0 1 110 2 0
DSRAEFL 0 1 0 1 162 2 0
DTHFL 0 1 0 1 251 2 0
BMIBLGR1 0 1 3 6 0 3 0
DURDSGR1 0 1 3 4 0 2 0
RFSTDTC 0 1 10 10 0 205 0
RFENDTC 0 1 10 10 0 211 0
DCDECOD 0 1 5 27 0 9 0
DCREASCD 0 1 5 18 0 10 0

Variable type: Date

skim_variable n_missing complete_rate min max median n_unique
TRTSDT 0 1 2012-07-09 2014-09-02 2013-06-13 205
TRTEDT 0 1 2012-08-28 2015-03-05 2013-09-27 214
DISONSDT 0 1 1998-06-13 2013-09-16 2010-05-05 241
VISIT1DT 0 1 2012-07-06 2014-08-29 2013-06-02 207
RFENDT 0 1 2012-09-01 2015-03-05 2013-09-30 211

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
TRT01PN 0 1 44.65 33.84 0.0 0.00 54.00 81.00 81.0 ▇▁▁▇▇
TRT01AN 0 1 44.65 33.84 0.0 0.00 54.00 81.00 81.0 ▇▁▁▇▇
TRTDUR 0 1 116.09 70.30 1.0 46.25 133.50 183.00 212.0 ▅▃▁▁▇
AVGDD 0 1 41.54 30.98 0.0 0.00 54.00 70.10 78.6 ▇▁▁▇▆
CUMDOSE 0 1 4265.57 4963.57 0.0 0.00 2322.00 7809.75 15417.0 ▇▂▁▂▂
AGE 0 1 75.09 8.25 51.0 70.00 77.00 81.00 89.0 ▁▂▅▇▅
AGEGR1N 0 1 2.17 0.64 1.0 2.00 2.00 3.00 3.0 ▂▁▇▁▅
RACEN 0 1 1.11 0.42 1.0 1.00 1.00 1.00 6.0 ▇▁▁▁▁
BMIBL 1 1 24.67 4.09 13.7 21.90 24.20 27.30 40.1 ▁▇▇▂▁
HEIGHTBL 0 1 163.93 10.76 135.9 156.20 162.85 171.50 195.6 ▂▆▇▅▁
WEIGHTBL 1 1 66.65 14.13 34.0 55.30 66.70 77.10 108.0 ▂▇▇▃▁
EDUCLVL 0 1 12.75 3.38 3.0 12.00 12.00 16.00 24.0 ▁▃▇▃▁
DURDIS 0 1 43.94 28.40 2.2 24.30 36.25 57.35 183.1 ▇▅▁▁▁
VISNUMEN 0 1 9.58 2.83 4.0 7.25 11.00 12.00 12.0 ▂▂▁▂▇
MMSETOT 0 1 18.14 4.21 10.0 15.00 19.00 22.00 24.0 ▃▃▅▆▇

참고: 출력 결과에 경고 메시지가 표시될 수 있습니다. 결측치나 데이터 타입 파싱 결과를 확인하는 용도로 활용하세요.

  1. 이제 유효성 분석 대상군(Efficacy Population) 추출을 위해 EFFFL 변수 값이 “Y”인 데이터만 필터링합니다. R에서 ’같음’을 비교할 때는 == 연산자를 사용합니다.
adsl_eff <- filter(.data = adsl, EFFFL == 'Y')
head(adsl_eff)
       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

필터링 결과 234행의 데이터가 남았습니다. 대소문자와 따옴표 사용에 유의하세요.

  1. 추출된 데이터를 USUBJID 기준으로 정렬합니다. arrange() 함수를 사용합니다.
sort_adsl_eff <- arrange(.data = adsl_eff, USUBJID)
head(sort_adsl_eff)
       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

tidyverse의 파이프 연산자 %>%를 사용하면 여러 단계를 체인처럼 연결할 수 있습니다.

sort_adsl_eff <- adsl %>%
  filter(EFFFL == "Y") %>%
  arrange(USUBJID)

위 코드는 “adsl 데이터를 가져와서(%>%) EFFFL이 Y인 것만 필터링하고(%>%) 다시 USUBJID 기준으로 정렬하라”고 읽을 수 있습니다.

  1. 필터링된 adsl_eff 데이터의 요약을 다시 확인해 봅니다.
skim(adsl_eff)
Data summary
Name adsl_eff
Number of rows 234
Number of columns 48
_______________________
Column type frequency:
character 28
Date 5
numeric 15
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
STUDYID 0 1 12 12 0 1 0
USUBJID 0 1 11 11 0 234 0
SUBJID 0 1 4 4 0 234 0
SITEID 0 1 3 3 0 17 0
SITEGR1 0 1 3 3 0 11 0
ARM 0 1 7 20 0 3 0
TRT01P 0 1 7 20 0 3 0
TRT01A 0 1 7 20 0 3 0
AGEGR1 0 1 3 5 0 3 0
AGEU 0 1 5 5 0 1 0
RACE 0 1 5 32 0 3 0
SEX 0 1 1 1 0 2 0
ETHNIC 0 1 18 22 0 2 0
SAFFL 0 1 1 1 0 1 0
ITTFL 0 1 1 1 0 1 0
EFFFL 0 1 1 1 0 1 0
COMP8FL 0 1 1 1 0 2 0
COMP16FL 0 1 1 1 0 2 0
COMP24FL 0 1 1 1 0 2 0
DISCONFL 0 1 0 1 110 2 0
DSRAEFL 0 1 0 1 151 2 0
DTHFL 0 1 0 1 232 2 0
BMIBLGR1 0 1 3 6 0 3 0
DURDSGR1 0 1 3 4 0 2 0
RFSTDTC 0 1 10 10 0 190 0
RFENDTC 0 1 10 10 0 198 0
DCDECOD 0 1 5 27 0 9 0
DCREASCD 0 1 5 18 0 10 0

Variable type: Date

skim_variable n_missing complete_rate min max median n_unique
TRTSDT 0 1 2012-07-09 2014-09-02 2013-06-15 190
TRTEDT 0 1 2012-09-01 2015-03-05 2013-10-08 198
DISONSDT 0 1 1998-06-13 2013-09-16 2010-05-01 223
VISIT1DT 0 1 2012-07-06 2014-08-29 2013-06-05 191
RFENDT 0 1 2012-09-02 2015-03-05 2013-10-11 198

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
TRT01PN 0 1 44.31 33.55 0.0 0.00 54.00 81.00 81.0 ▇▁▁▇▇
TRT01AN 0 1 44.31 33.55 0.0 0.00 54.00 81.00 81.0 ▇▁▁▇▇
TRTDUR 0 1 123.89 67.54 2.0 58.25 163.50 183.00 212.0 ▃▃▁▁▇
AVGDD 0 1 41.82 31.16 0.0 0.00 54.00 71.20 78.6 ▇▁▁▇▆
CUMDOSE 0 1 4555.04 5056.10 0.0 0.00 2794.50 9531.00 15417.0 ▇▂▁▂▂
AGE 0 1 75.01 8.13 51.0 70.25 76.50 81.00 88.0 ▁▂▅▇▇
AGEGR1N 0 1 2.17 0.63 1.0 2.00 2.00 3.00 3.0 ▂▁▇▁▅
RACEN 0 1 1.11 0.43 1.0 1.00 1.00 1.00 6.0 ▇▁▁▁▁
BMIBL 1 1 24.79 4.06 13.7 21.90 24.60 27.50 40.1 ▁▇▇▂▁
HEIGHTBL 0 1 164.27 10.77 135.9 156.20 163.65 172.70 195.6 ▂▆▇▅▁
WEIGHTBL 1 1 67.19 13.89 34.0 55.80 67.10 77.10 108.0 ▂▇▇▅▁
EDUCLVL 0 1 12.84 3.33 3.0 12.00 12.00 16.00 24.0 ▁▃▇▃▁
DURDIS 0 1 44.74 28.82 2.2 24.55 36.60 58.38 183.1 ▇▆▁▁▁
VISNUMEN 0 1 9.93 2.64 4.0 8.00 12.00 12.00 12.0 ▂▁▁▂▇
MMSETOT 0 1 18.28 4.20 10.0 15.00 19.50 22.00 24.0 ▃▃▅▆▇
  1. 데이터를 TRT01AUSUBJID 순으로 정렬하여 새로운 객체 adsl_eff_srt를 생성합니다.
adsl_eff_srt <- arrange(.data = adsl_eff, TRT01A, USUBJID)
head(adsl_eff_srt)
       STUDYID     USUBJID SUBJID SITEID SITEGR1     ARM  TRT01P TRT01PN
1 CDISCPILOT01 01-701-1015   1015    701     701 Placebo Placebo       0
2 CDISCPILOT01 01-701-1023   1023    701     701 Placebo Placebo       0
3 CDISCPILOT01 01-701-1047   1047    701     701 Placebo Placebo       0
4 CDISCPILOT01 01-701-1118   1118    701     701 Placebo Placebo       0
5 CDISCPILOT01 01-701-1130   1130    701     701 Placebo Placebo       0
6 CDISCPILOT01 01-701-1153   1153    701     701 Placebo Placebo       0
   TRT01A TRT01AN     TRTSDT     TRTEDT TRTDUR AVGDD CUMDOSE AGE AGEGR1 AGEGR1N
1 Placebo       0 2014-01-02 2014-07-02    182     0       0  63    <65       1
2 Placebo       0 2012-08-05 2012-09-01     28     0       0  64    <65       1
3 Placebo       0 2013-02-12 2013-03-09     26     0       0  85    >80       3
4 Placebo       0 2014-03-12 2014-09-09    182     0       0  52    <65       1
5 Placebo       0 2014-02-15 2014-08-16    183     0       0  84    >80       3
6 Placebo       0 2013-09-23 2014-03-16    175     0       0  79  65-80       2
   AGEU  RACE RACEN SEX                 ETHNIC SAFFL ITTFL EFFFL COMP8FL
1 YEARS WHITE     1   F     HISPANIC OR LATINO     Y     Y     Y       Y
2 YEARS WHITE     1   M     HISPANIC OR LATINO     Y     Y     Y       N
3 YEARS WHITE     1   F NOT HISPANIC OR LATINO     Y     Y     Y       N
4 YEARS WHITE     1   M NOT HISPANIC OR LATINO     Y     Y     Y       Y
5 YEARS WHITE     1   M NOT HISPANIC OR LATINO     Y     Y     Y       Y
6 YEARS WHITE     1   F NOT HISPANIC OR LATINO     Y     Y     Y       Y
  COMP16FL COMP24FL DISCONFL DSRAEFL DTHFL BMIBL BMIBLGR1 HEIGHTBL WEIGHTBL
1        Y        Y                         25.1   25-<30    147.3     54.4
2        N        N        Y       Y        30.4     >=30    162.6     80.3
3        N        N        Y       Y        30.4     >=30    148.6     67.1
4        Y        Y                         21.9      <25    180.3     71.2
5        Y        Y                         27.6   25-<30    169.7     79.4
6        Y        Y                         23.8      <25    156.2     58.1
  EDUCLVL   DISONSDT DURDIS DURDSGR1   VISIT1DT    RFSTDTC    RFENDTC VISNUMEN
1      16 2010-04-30   43.9     >=12 2013-12-26 2014-01-02 2014-07-02       12
2      14 2006-03-11   76.4     >=12 2012-07-22 2012-08-05 2012-09-02        5
3       8 2009-07-26   42.0     >=12 2013-01-22 2013-02-12 2013-03-29        6
4      14 2010-06-24   44.2     >=12 2014-02-27 2014-03-12 2014-09-09       12
5      12 2010-05-22   44.7     >=12 2014-02-09 2014-02-15 2014-08-16       12
6       6 2005-05-13   99.8     >=12 2013-09-06 2013-09-23 2014-04-01       12
      RFENDT       DCDECOD      DCREASCD MMSETOT
1 2014-07-02     COMPLETED     Completed      23
2 2012-09-02 ADVERSE EVENT Adverse Event      23
3 2013-03-29 ADVERSE EVENT Adverse Event      23
4 2014-09-09     COMPLETED     Completed      20
5 2014-08-16     COMPLETED     Completed      19
6 2014-04-01     COMPLETED     Completed      10
  1. select() 함수로 필요한 열(USUBJID, AGE, AGEU, SEX, RACE, ETHNIC, TRT01A)만 선택합니다.
adsl_eff_srt <- adsl_eff_srt %>%
  select(USUBJID, AGE, AGEU, SEX, RACE, ETHNIC, TRT01A)
head(adsl_eff_srt)
      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개의 열만 남았습니다.

  1. 출력용 리스팅을 위해 열 이름을 알아보기 쉽게 변경합니다. names() 함수에 c() 함수로 만든 이름 벡터를 전달합니다.
names(x = adsl_eff_srt) <- c("Subject ID", "Age", "AgeUnits", "Sex", "Race", "Ethnicity", "Treatment")
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
  1. 최종 결과물을 출력합니다. 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: 오른쪽)을 변경해 보세요.

htmlTable(x =  adsl_eff_srt,
          align = "l", 
          rnames = FALSE,
          css.cell = "padding-left: .5em; padding-right: .2em;")