개인 PC에서 실습을 원한다면 http://www.r-project.org 와 https://rstudio.com/products/rstudio/download/#download 에서 R과 RStudio 를 설치하자.
R 기초연산 : 벡터(vector)
R 의 기본 연산단위는 벡터이며, x <- c(1, 2, 3) 은 1,2,3 으로 이루어진 길이 3인 벡터를 x 에 저장한다. 대입연산자는 = 와 <- 둘 다 가능하지만 함수의 인자로도 쓰이는 = 와 구별하기 위해 <- 를 권장한다. 자주 쓰는 연산을 실습하자.
x <-c(1, 2, 3, 4, 5, 6) ## vector of variabley <-c(7, 8, 9, 10, 11, 12)x + y x * ysqrt(x) ## rootsum(x) diff(x) ## differencemean(x) ## mean var(x) ## variancesd(x) ## standard deviationmedian(x) ## medianIQR(x) ## inter-quantile rangemax(x) ## max valuewhich.max(x) ## order of max valuemax(x, y) ## max value among x & ylength(x)
max(x, y) 는 x, y 각각의 최대값이 아닌, 전체에서 최대인 값 1개를 보여줌을 기억하자. 잠시 후 각각의 최대값 구하는 연습문제가 나온다.
R 기초연산 : 벡터(vector) 2
벡터에서 특정 항목을 골라내려면 그것의 위치 혹은 조건문을 이용한다.
x[2] ## 2 번째x[-2] ## 2 번째만 빼고x[1:3] ## 1-3 번째x[c(1, 2, 3)] ## 동일 x[c(1, 3, 4, 5, 6)] ## 1, 3, 4, 5, 6 번째x >=4## 각 항목이 4 이상인지 TRUE/FALSEsum(x >=4) ## TRUE 1, FALSE 0 인식 x[x >=4] ## TRUE 인 것들만, 즉 4 이상인 것들 sum(x[x >=4]) ## 4 이상인 것들만 더하기. x %in%c(1, 3, 5) ## 1, 3, 5 중 하나에 속하는지 TRUE/FALSEx[x %in%c(1, 3, 5)]
벡터만들기
seq 로 일정 간격인, rep 로 항목들이 반복되는 벡터를 만들 수 있다.
v1 <-seq(-5, 5, by = .2); v1 ## Sequencev2 <-rep(1, 3); v2 ## Repeatv3 <-rep(c(1, 2, 3), 2); v3 ## Repeat for vectorv4 <-rep(c(1, 2, 3), each =2); v4 ## Repeat for vector : each
for 문
for loop 는 같은 작업을 반복할 때 이용하며 while 도 비슷한 의미이다. 예시를 통해 배워보자.
for (i in1:3){print(i)}i <-0for (j inc(1, 2, 4, 5, 6)){ i <- i + j}i
if/else문
if 와 else 는 조건문을 다룬다. else 나 else if 문은 선행 조건문의 마지막과 같은 줄이어야 함을 기억하자.
x <-5if (x >=3){ x <- x +3}x # 8x <-5if (x >=10){print("High")} elseif (x >=5){ # 5print("Medium")} else {print("Low")} ## else if, else 주의: 반드시 } 와 같은 줄에 위치하도록.
ifelse 문
ifelse 는 벡터화된 if/else 문으로 벡터의 각 항목마다 조건문을 적용하는데, 엑셀의 if 문과 비슷하다.
x <-1:6y <-ifelse(x >=4, "Yes", "No") ## ifelse (조건, 참일때, 거짓일때)y # No No No Yes Yes Yes
함수 만들기
막 R을 배우는 단계에서는 함수를 만들어 쓸 일이 거의 없겠지만, 결측치 포함된 데이터에서 평균이나 분산을 구할 때 귀찮을 수 있다. R은 결측치가 하나라도 포함되면 평균값, 분산값으로 NA를 출력하기 때문이다. 이를 해결하기 위해서라도 아래처럼 기초 함수 만드는 법은 알고 있는 것이 좋다.
x <-c(1:10, 12, 13, NA, NA, 15, 17) ## 결측치가 포함되어 있다면..mean(x) # NA : Not Availablemean0 <-function(x){mean(x, na.rm = T)} ## mean함수의 na.rm 옵션을 TRUE로 바꿈. default는 Fmean0 <-function(x){ mean(x, na.rm = T) } ## 한줄에 쓸 수도 있다. mean0(x)
둘 이상의 변수를 포함한 함수도 다음과 같이 만들 수 있다.
twomean <-function(x1, x2){ a <- (x1 + x2)/2 a}twomean(4, 6)
Apply 문 : apply, sapply, lapply
벡터를 다루는 연산을 잘 활용하면, 벡터의 각 항목에 대해 for loop 을 쓰는 것보다 간편하게 코드를 작성할 수 있다. 행렬에서 행마다 평균을 구하는 예를 살펴보자.
mat <-matrix(1:20, nrow =4, byrow = T) ## 4행 5열, byrow = T : 행부터 채운다. mat
모든 행에 대해 for loop 을 이용, 평균을 구하여 저장하는 코드는 아래와 같다.
out <-NULL## 빈 벡터, 여기에 하나씩 붙여넣는다.for (i in1:nrow(mat)){ out <-c(out, mean(mat[i, ]))}out # 3, 8, 13, 18
Apply 문 : apply, sapply, lapply 2
처음에 빈 벡터를 만들고 여기에 결과를 붙여가는 모습이 번거로워 보인다. sapply 또는 lapply 를 사용하면 행 또는 열 단위 연산을 간단히 수행할 수 있다.
sapply(1:nrow(mat), function(x){mean(mat[x, ])}) ## Return vectorlapply(1:nrow(mat), function(x){mean(mat[x, ])}) ## Return list typeunlist(lapply(1:nrow(mat), function(x){mean(mat[x, ])})) ## Same to sapply
처음에 빈 벡터를 만들고, 이어붙이는 과정이 생략되어 간단한 코드가 되었다. list 는 벡터보다 상위개념으로 모든 것을 담을 수 있는 큰 그릇에 비유할 수 있는데, 본 강의에서는 unlist 를 취하면 벡터나 행렬을 얻게 된다는 정도만 언급하고 넘어가겠다. 사실 행렬의 행/열 단위 연산은 apply 혹은 row***, col*** 시리즈의 함수가 따로 있어, 더 간단히 이용할 수 있다.
폴더 구분을 / 로 해야 한다는 점을 명심하자 (\\ 도 가능). R 은 유닉스 기반이기 때문이다. 이제 실습 데이터를 읽어볼텐데, 가급적이면 데이터 포맷은 csv로 만드는 것을 추천한다. 콤마로 분리된 가장 간단한 형태로, 용량도 작고 어떤 소프트웨어 에서도 읽을 수 있기 때문이다. 물론 Excel, SPSS, SAS 파일도 읽을 수 있는데, 변수명이나 값에 한글이 있으면 encoding 에러가 생길 수 있으므로 미리 처리하자.
ex <-read.csv("example_g1e.csv")head(ex)
데이터 불러오기, 저장하기 2
URL 링크를 이용할 수도 있다.
ex <-read.csv("https://raw.githubusercontent.com/jinseob2kim/lecture-snuhlab/master/data/example_g1e.csv") # Public link !
본격적으로 데이터를 살펴보자. 데이터는 09-15년 공단 건강검진 데이터에서 실습용으로 32명을 뽑은 자료이며, 자세한 내용은 설명자료를 참고하자.
데이터 살펴보기
head 로 처음 6줄, tail 로 마지막 6줄을 볼 수 있다. 데이터 간단히 확인하려고 쓰인다.
head(ex) ## 처음 6행tail(ex) ## 마지막 6행head(ex, 10) ## 처음 10행
데이터 살펴보기 2
str 은 head 와는 다른 방식으로 데이터를 확인한다. int 는 정수, num 은 실수형을 의미한다.
str(ex)
'data.frame': 1644 obs. of 32 variables:
$ EXMD_BZ_YYYY : int 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 ...
$ RN_INDI : int 562083 334536 911867 183321 942671 979358 554112 487160 793017 219397 ...
$ HME_YYYYMM : int 200909 200911 200903 200908 200909 200912 200911 200908 200906 200912 ...
$ Q_PHX_DX_STK : int 0 0 0 NA NA NA NA NA NA 0 ...
$ Q_PHX_DX_HTDZ : int 0 0 0 NA NA NA NA NA NA 0 ...
$ Q_PHX_DX_HTN : int 1 0 0 NA NA NA NA NA NA 1 ...
$ Q_PHX_DX_DM : int 0 0 0 NA NA NA NA NA NA 0 ...
$ Q_PHX_DX_DLD : int 0 0 0 NA NA NA NA NA NA 0 ...
$ Q_PHX_DX_PTB : int NA NA NA NA NA NA NA NA NA NA ...
$ Q_HBV_AG : int 3 2 3 3 3 2 2 3 3 3 ...
$ Q_SMK_YN : int 1 1 1 1 1 1 1 1 1 1 ...
$ Q_DRK_FRQ_V09N: int 0 0 0 0 0 0 0 0 0 0 ...
$ HGHT : int 144 162 163 152 159 157 160 159 156 146 ...
$ WGHT : int 61 51 65 51 50 55 56 54 53 48 ...
$ WSTC : int 90 63 82 70 73 73 67 66 67 78 ...
$ BMI : num 29.4 19.4 24.5 22.1 19.8 22.3 21.9 21.4 21.8 22.5 ...
$ VA_LT : num 0.7 0.8 0.7 0.8 0.7 1.5 1.5 1.2 1.2 1.5 ...
$ VA_RT : num 0.8 1 0.6 0.9 0.8 1.5 1.5 1.5 1 1.5 ...
$ BP_SYS : int 120 120 130 101 132 110 119 111 138 138 ...
$ BP_DIA : int 80 80 80 62 78 70 78 60 72 84 ...
$ URN_PROT : int 1 1 1 1 1 1 1 1 1 1 ...
$ HGB : num 12.6 13.8 15 13.1 13 11.9 11.2 12.2 11 12.8 ...
$ FBS : int 117 96 118 90 92 100 84 88 74 107 ...
$ TOT_CHOL : int 264 169 216 199 162 192 152 166 155 178 ...
$ TG : int 128 92 132 100 58 109 38 42 86 87 ...
$ HDL : int 60 70 55 65 40 53 43 58 52 35 ...
$ LDL : int 179 80 134 114 111 117 101 99 85 125 ...
$ CRTN : num 0.9 0.9 0.8 0.9 0.9 0.7 0.8 1 0.6 0.7 ...
$ SGOT : int 25 18 26 18 24 15 8 16 15 21 ...
$ SGPT : int 20 15 30 14 23 12 6 11 13 21 ...
$ GGT : int 25 28 30 11 15 14 10 12 13 23 ...
$ GFR : int 59 74 79 61 49 83 97 65 96 70 ...
데이터 살펴보기 3
names 로 변수들 이름을 확인할 수 있다. 공백이나 특수문자는 “.” 로 바뀌고, 이름이 같은 변수들은 뒤에 숫자가 추가되어 구별된다. read.csv(..., check.names = F) 옵션으로 원래 이름을 유지할 수 있으나 에러의 원인이 되므로 추천하지 않는다.
클래스는 class로 확인한다. read.csv는 data.frame, Excel/SAS/SPSS는 tibble & data.frame인데, data.frame은 행렬이면서 데이터에 특화된 list, tibble은 앞서 언급했던 tidyverse 스타일의 data.frame인 정도만 알고 넘어가자.
class(ex)
[1] "data.frame"
class(ex.spss)
[1] "tbl_df" "tbl" "data.frame"
데이터 살펴보기 6
summary 로 모든 변수들의 평균, 중위수, 결측치 등을 한 번에 확인할 수 있다. R은 결측치를 NA로 표시하며, 안타깝지만 분산은 나오지 않는다.
summary(ex)
EXMD_BZ_YYYY RN_INDI HME_YYYYMM Q_PHX_DX_STK
Min. :2009 Min. : 2270 Min. :200901 Min. :0.0000
1st Qu.:2010 1st Qu.: 230726 1st Qu.:201011 1st Qu.:0.0000
Median :2012 Median : 487160 Median :201210 Median :0.0000
Mean :2012 Mean : 490782 Mean :201216 Mean :0.0112
3rd Qu.:2014 3rd Qu.: 726101 3rd Qu.:201406 3rd Qu.:0.0000
Max. :2015 Max. :1010623 Max. :201512 Max. :1.0000
NA's :573
Q_PHX_DX_HTDZ Q_PHX_DX_HTN Q_PHX_DX_DM Q_PHX_DX_DLD
Min. :0.0000 Min. :0.00 Min. :0.0000 Min. :0.0000
1st Qu.:0.0000 1st Qu.:0.00 1st Qu.:0.0000 1st Qu.:0.0000
Median :0.0000 Median :0.00 Median :0.0000 Median :0.0000
Mean :0.0241 Mean :0.25 Mean :0.0693 Mean :0.0399
3rd Qu.:0.0000 3rd Qu.:0.25 3rd Qu.:0.0000 3rd Qu.:0.0000
Max. :1.0000 Max. :1.00 Max. :1.0000 Max. :1.0000
NA's :566 NA's :492 NA's :547 NA's :566
Q_PHX_DX_PTB Q_HBV_AG Q_SMK_YN Q_DRK_FRQ_V09N
Min. :0.0000 Min. :1.000 Min. :1.000 Min. :0.000
1st Qu.:0.0000 1st Qu.:2.000 1st Qu.:1.000 1st Qu.:0.000
Median :0.0000 Median :2.000 Median :1.000 Median :1.000
Mean :0.0276 Mean :2.235 Mean :1.632 Mean :1.026
3rd Qu.:0.0000 3rd Qu.:3.000 3rd Qu.:2.000 3rd Qu.:2.000
Max. :1.0000 Max. :3.000 Max. :3.000 Max. :7.000
NA's :703 NA's :2 NA's :2 NA's :6
HGHT WGHT WSTC BMI
Min. :134.0 Min. : 31.0 Min. : 57.00 Min. :12.30
1st Qu.:158.0 1st Qu.: 56.0 1st Qu.: 74.00 1st Qu.:21.50
Median :165.0 Median : 64.0 Median : 81.00 Median :23.70
Mean :164.5 Mean : 65.1 Mean : 80.69 Mean :23.92
3rd Qu.:171.0 3rd Qu.: 73.0 3rd Qu.: 87.00 3rd Qu.:26.20
Max. :188.0 Max. :118.0 Max. :114.00 Max. :37.20
VA_LT VA_RT BP_SYS BP_DIA
Min. :0.100 Min. :0.1000 Min. : 81.0 Min. : 49.0
1st Qu.:0.800 1st Qu.:0.7000 1st Qu.:110.0 1st Qu.: 70.0
Median :1.000 Median :1.0000 Median :120.0 Median : 78.0
Mean :0.984 Mean :0.9792 Mean :122.3 Mean : 76.6
3rd Qu.:1.200 3rd Qu.:1.2000 3rd Qu.:130.0 3rd Qu.: 82.0
Max. :9.900 Max. :9.9000 Max. :180.0 Max. :120.0
URN_PROT HGB FBS TOT_CHOL
Min. :1.000 Min. : 5.90 Min. : 61.00 Min. : 68.0
1st Qu.:1.000 1st Qu.:12.90 1st Qu.: 86.00 1st Qu.:170.0
Median :1.000 Median :14.10 Median : 94.00 Median :193.0
Mean :1.078 Mean :14.11 Mean : 97.23 Mean :194.9
3rd Qu.:1.000 3rd Qu.:15.40 3rd Qu.:103.00 3rd Qu.:218.0
Max. :5.000 Max. :18.30 Max. :290.00 Max. :363.0
NA's :4
TG HDL LDL CRTN
Min. : 13.0 Min. : 23.0 Min. : 19.0 Min. : 0.4000
1st Qu.: 72.0 1st Qu.: 46.0 1st Qu.: 90.0 1st Qu.: 0.8000
Median : 106.0 Median : 54.0 Median : 112.0 Median : 0.9000
Mean : 134.9 Mean : 55.9 Mean : 118.7 Mean : 0.9891
3rd Qu.: 163.0 3rd Qu.: 64.0 3rd Qu.: 134.0 3rd Qu.: 1.0000
Max. :1210.0 Max. :593.0 Max. :8100.0 Max. :16.5000
NA's :16
SGOT SGPT GGT GFR
Min. : 6.0 Min. : 3.00 Min. : 6.00 Min. : 3.00
1st Qu.: 19.0 1st Qu.: 15.00 1st Qu.: 16.00 1st Qu.: 76.00
Median : 23.0 Median : 20.00 Median : 24.50 Median : 87.00
Mean : 25.6 Mean : 25.98 Mean : 36.34 Mean : 89.74
3rd Qu.: 28.0 3rd Qu.: 30.00 3rd Qu.: 41.00 3rd Qu.:101.00
Max. :459.0 Max. :779.00 Max. :408.00 Max. :196.00
NA's :467
특정 변수 보기
data.frame에서 특정변수는 $를 이용, 데이터이름$변수이름으로 확인할 수 있다. 앞서 언급했듯이 data.frame은 행렬과 list의 성질도 갖고 있어 해당 스타일로도 가능하다.
ex$EXMD_BZ_YYYY ## data.frame styleex[, "EXMD_BZ_YYYY"] ## matrix styleex[["EXMD_BZ_YYYY"]] ## list styleex[, 1] ## matrix style with orderex[[1]] ## list style with order
특정 변수 보기 2
2개 이상 변수선택은 행렬 스타일을 이용한다.
ex[, c("EXMD_BZ_YYYY", "RN_INDI", "BMI")] ## matrix syle with namesex[, c(1, 2, 16)] ## matrix syle with namesex[, names(ex)[c(1, 2, 16)]] ## same
특정 변수 보기 3
특정 변수는 벡터형태로 나타나므로 처음에 다루었던 벡터다루기를 그대로 활용할 수 있다. 예를 들어 년도 변수인 EXMD_BZ_YYYY의 첫 50개만 확인하면 아래와 같다.
EXMD_BZ_YYYY RN_INDI HME_YYYYMM Q_PHX_DX_STK Q_PHX_DX_HTDZ
Min. :2009 4263 : 7 Min. :200901 0 :1059 0 :1052
1st Qu.:2010 38967 : 7 1st Qu.:201011 1 : 12 1 : 26
Median :2012 56250 : 7 Median :201210 NA's: 573 NA's: 566
Mean :2012 84322 : 7 Mean :201216
3rd Qu.:2014 99917 : 7 3rd Qu.:201406
Max. :2015 115809 : 7 Max. :201512
(Other):1602
Q_PHX_DX_HTN Q_PHX_DX_DM Q_PHX_DX_DLD Q_PHX_DX_PTB Q_HBV_AG Q_SMK_YN
0 :864 0 :1021 0 :1035 0 :915 1 : 77 1 :995
1 :288 1 : 76 1 : 43 1 : 26 2 :1102 2 :256
NA's:492 NA's: 547 NA's: 566 NA's:703 3 : 463 3 :391
NA's: 2 NA's: 2
Q_DRK_FRQ_V09N HGHT WGHT WSTC
0 :805 Min. :134.0 Min. : 31.0 Min. : 57.00
1 :379 1st Qu.:158.0 1st Qu.: 56.0 1st Qu.: 74.00
2 :249 Median :165.0 Median : 64.0 Median : 81.00
3 :121 Mean :164.5 Mean : 65.1 Mean : 80.69
4 : 28 3rd Qu.:171.0 3rd Qu.: 73.0 3rd Qu.: 87.00
(Other): 56 Max. :188.0 Max. :118.0 Max. :114.00
NA's : 6
BMI VA_LT VA_RT BP_SYS
Min. :12.30 Min. :0.100 Min. :0.1000 Min. : 81.0
1st Qu.:21.50 1st Qu.:0.800 1st Qu.:0.7000 1st Qu.:110.0
Median :23.70 Median :1.000 Median :1.0000 Median :120.0
Mean :23.92 Mean :0.984 Mean :0.9792 Mean :122.3
3rd Qu.:26.20 3rd Qu.:1.200 3rd Qu.:1.2000 3rd Qu.:130.0
Max. :37.20 Max. :9.900 Max. :9.9000 Max. :180.0
BP_DIA URN_PROT HGB FBS
Min. : 49.0 Min. :1.000 Min. : 5.90 Min. : 61.00
1st Qu.: 70.0 1st Qu.:1.000 1st Qu.:12.90 1st Qu.: 86.00
Median : 78.0 Median :1.000 Median :14.10 Median : 94.00
Mean : 76.6 Mean :1.078 Mean :14.11 Mean : 97.23
3rd Qu.: 82.0 3rd Qu.:1.000 3rd Qu.:15.40 3rd Qu.:103.00
Max. :120.0 Max. :5.000 Max. :18.30 Max. :290.00
NA's :4
TOT_CHOL TG HDL LDL
Min. : 68.0 Min. : 13.0 Min. : 23.0 Min. : 19.0
1st Qu.:170.0 1st Qu.: 72.0 1st Qu.: 46.0 1st Qu.: 90.0
Median :193.0 Median : 106.0 Median : 54.0 Median : 112.0
Mean :194.9 Mean : 134.9 Mean : 55.9 Mean : 118.7
3rd Qu.:218.0 3rd Qu.: 163.0 3rd Qu.: 64.0 3rd Qu.: 134.0
Max. :363.0 Max. :1210.0 Max. :593.0 Max. :8100.0
NA's :16
CRTN SGOT SGPT GGT
Min. : 0.4000 Min. : 6.0 Min. : 3.00 Min. : 6.00
1st Qu.: 0.8000 1st Qu.: 19.0 1st Qu.: 15.00 1st Qu.: 16.00
Median : 0.9000 Median : 23.0 Median : 20.00 Median : 24.50
Mean : 0.9891 Mean : 25.6 Mean : 25.98 Mean : 36.34
3rd Qu.: 1.0000 3rd Qu.: 28.0 3rd Qu.: 30.00 3rd Qu.: 41.00
Max. :16.5000 Max. :459.0 Max. :779.00 Max. :408.00
GFR zero BMI_cat
Min. : 3.00 Min. :0 Min. :0.0000
1st Qu.: 76.00 1st Qu.:0 1st Qu.:0.0000
Median : 87.00 Median :0 Median :0.0000
Mean : 89.74 Mean :0 Mean :0.3449
3rd Qu.:101.00 3rd Qu.:0 3rd Qu.:1.0000
Max. :196.00 Max. :0 Max. :1.0000
NA's :467
변수 클래스 설정 3
summary 를 보면 설문조사 변수들이 처음과 달리 빈도로 요약됨을 알 수 있다. 한 가지 주의할 점은 factor 를 numeric으로 바로 바꾸면 안된다는 것이다. 방금 factor 로 바꾼 Q_PHX_DX_STK를 numeric으로 바꿔서 테이블로 요약하면, 원래의 0/1이 아닌 1/2로 바뀐다.
table(as.numeric(ex$Q_PHX_DX_STK))
1 2
1059 12
factor를 바로 바꾸면 원래 값이 아닌, factor에 내장된 레벨(순서값)로 바뀌기 때문이다. 제대로 바꾸려면 아래처럼 character로 먼저 바꿔준 후 숫자형을 적용해야 한다.
table(as.numeric(as.character(ex$Q_PHX_DX_STK)))
0 1
1059 12
변수 클래스 설정 4
마지막으로 Date 클래스를 살펴보자. 검진년월 변수인 HME_YYYYMM를 Date로 바꿔 볼텐데, Date는 년/월/일이 모두 필요하므로 일은 1로 통일하고 paste로 붙이겠다.
addDate <-paste(ex$HME_YYYYMM, "01", sep ="") ## add day- use `paste`ex$HME_YYYYMM <-as.Date(addDate, format ="%Y%m%d") ## set format head(ex$HME_YYYYMM)
EXMD_BZ_YYYY RN_INDI HME_YYYYMM Q_HBV_AG
Min. :2009 Min. : 1.0 Min. :2009-01-01 Min. :1.000
1st Qu.:2010 1st Qu.:133.8 1st Qu.:2010-11-01 1st Qu.:2.000
Median :2012 Median :275.0 Median :2012-10-01 Median :2.000
Mean :2012 Mean :272.7 Mean :2012-08-31 Mean :2.235
3rd Qu.:2014 3rd Qu.:405.2 3rd Qu.:2014-06-01 3rd Qu.:3.000
Max. :2015 Max. :547.0 Max. :2015-12-01 Max. :3.000
Q_SMK_YN Q_DRK_FRQ_V09N HGHT WGHT
Min. :1.000 Min. :1.000 Min. :134.0 Min. : 31.0
1st Qu.:1.000 1st Qu.:1.000 1st Qu.:158.0 1st Qu.: 56.0
Median :1.000 Median :2.000 Median :165.0 Median : 64.0
Mean :1.631 Mean :2.023 Mean :164.5 Mean : 65.1
3rd Qu.:2.000 3rd Qu.:3.000 3rd Qu.:171.0 3rd Qu.: 73.0
Max. :3.000 Max. :8.000 Max. :188.0 Max. :118.0
WSTC BMI VA_LT VA_RT
Min. : 57.00 Min. :12.30 Min. :0.100 Min. :0.1000
1st Qu.: 74.00 1st Qu.:21.50 1st Qu.:0.800 1st Qu.:0.7000
Median : 81.00 Median :23.70 Median :1.000 Median :1.0000
Mean : 80.69 Mean :23.92 Mean :0.984 Mean :0.9792
3rd Qu.: 87.00 3rd Qu.:26.20 3rd Qu.:1.200 3rd Qu.:1.2000
Max. :114.00 Max. :37.20 Max. :9.900 Max. :9.9000
BP_SYS BP_DIA URN_PROT HGB
Min. : 81.0 Min. : 49.0 Min. :1.000 Min. : 5.90
1st Qu.:110.0 1st Qu.: 70.0 1st Qu.:1.000 1st Qu.:12.90
Median :120.0 Median : 78.0 Median :1.000 Median :14.10
Mean :122.3 Mean : 76.6 Mean :1.078 Mean :14.11
3rd Qu.:130.0 3rd Qu.: 82.0 3rd Qu.:1.000 3rd Qu.:15.40
Max. :180.0 Max. :120.0 Max. :5.000 Max. :18.30
FBS TOT_CHOL TG HDL
Min. : 61.00 Min. : 68.0 Min. : 13.0 Min. : 23.0
1st Qu.: 86.00 1st Qu.:170.0 1st Qu.: 72.0 1st Qu.: 46.0
Median : 94.00 Median :193.0 Median : 106.0 Median : 54.0
Mean : 97.23 Mean :194.9 Mean : 134.9 Mean : 55.9
3rd Qu.:103.00 3rd Qu.:218.0 3rd Qu.: 163.0 3rd Qu.: 64.0
Max. :290.00 Max. :363.0 Max. :1210.0 Max. :593.0
LDL CRTN SGOT SGPT
Min. : 19.0 Min. : 0.4000 Min. : 6.0 Min. : 3.00
1st Qu.: 90.0 1st Qu.: 0.8000 1st Qu.: 19.0 1st Qu.: 15.00
Median : 112.0 Median : 0.9000 Median : 23.0 Median : 20.00
Mean : 118.6 Mean : 0.9891 Mean : 25.6 Mean : 25.98
3rd Qu.: 134.0 3rd Qu.: 1.0000 3rd Qu.: 28.0 3rd Qu.: 30.00
Max. :8100.0 Max. :16.5000 Max. :459.0 Max. :779.00
GGT zero BMI_cat
Min. : 6.00 Min. :0 Min. :0.0000
1st Qu.: 16.00 1st Qu.:0 1st Qu.:0.0000
Median : 24.50 Median :0 Median :0.0000
Mean : 36.34 Mean :0 Mean :0.3449
3rd Qu.: 41.00 3rd Qu.:0 3rd Qu.:1.0000
Max. :408.00 Max. :0 Max. :1.0000
Subset
특정 조건을 만족하는 서브데이터는 지금까지 배웠던 것을 응용해 만들 수도 있지만, subset 함수가 편하다. 아래는 2012 이후의 자료만 뽑는 예시이다. 이제부터는 결측치를 전부 제외한 ex.naomit데이터를 이용하겠다.
받은 데이터가 원하는 형태가 아닌 경우가 있다. 수축기 혈압을 10번 측정해서 각각 SBP1, SBP2, …, SBP10 변수에 기록된 데이터를 본다면, 이것들을 쫙 아래로 내려 측정시기, 측정값 2개의 변수로 정리하고 싶다는 마음이 들 것이다. 이럴 때 쓰는 함수가 melt, 반대로 데이터를 옆으로 늘릴 때 쓰는 함수가 dcast 이다1.