7.1 타이디 데이터 철학

(tidyverse 패키지와 함께 불려와 지는) “타이디(tidy)” 데이터 세트를 생성하는tidyr 패키지에 있는 도구들에 대하여 살펴보기로 한다.

타이디 데이터 세트는 다음과 같은 단순한 구조적 규칙을 준수한다:

  • 데이터 세트는 변수(컬럼)과 관측치(행)으로 조직화된 값들의 집합이다.
  • 변수는 관측치에 대한 동일 속성을 측정해야한다.
  • 관측치는 변수로 측정되는 동일한 단위를 나타내야 한다.

타이디 데이터 관습은 데이터를 조직화해야 할 필요가 있을 때마다 “다시 생각하게 만드는 것을” 피하게 해 주는 표준 조직을 제공한다.

좀 더 적극적으로 데이터를 “타이디”하게 만드는 것은 나중에 더 많은 시간을 절약하게 줄 것이다.

7.1.1 분석의 단위

데이터 센트의 각 행이 분석의 단위(unit of anlysis)를 나타내야 한다. 단위는 대상, 또는 대상 내의 시험 또는 주제의 모든 그룹 등이 될 수 있다.

일부 분석은 개별 단위와 종합된 단위를 설명하는 변수들을 포함할 수 있다. 예를 들어, 학생 수준의 분석은 학교 수준의 변수를 포함할 수 있다.

종단적 연구(longitudinal studies)들은 대상 내에서 그리고 대상 간의 변수들을 포함할 수 있다.

다차원 분석에 대해서는 분석의 단위가 일반적으로 가장 낮은 수준이다.

7.1.2 데이터 세트

patient_pt1_dm.csv 파일을 read_csv() 함수로 불러와서 티블 변수 d에 대입한다.

d <- read_csv("data7/patient_pt1_dm.csv")
## 
## -- Column specification --------------------------------------------------------
## cols(
##   .default = col_double(),
##   hospital = col_character(),
##   docid = col_character(),
##   dis_date = col_character(),
##   sex = col_character(),
##   familyhx = col_character(),
##   smokinghx = col_character(),
##   cancerstage = col_character(),
##   wbc = col_character()
## )
## i Use `spec()` for the full column specifications.

7.1.3 docid 별 그루핑

데이터 세트 ddocid 로 그루핑하여, by_doc 데이터 세트를 생성한다.

# group_by creates a grouped_df (grouped data frame) class structure
by_doc <- group_by(d, docid)
class(by_doc)
## [1] "grouped_df" "tbl_df"     "tbl"        "data.frame"

7.1.4 요약 정보 확인

summarise() 함수를 이용하여 by_doc 데이터 세트의 요약 정보를 확인하고, 그 결과를 변수 pat_summ에 대입한다.

# Create summaries of patients by doctor
pat_summ <- summarise(by_doc,
                      n_pat = n(), # number of patients
                      longest_los = max(lengthofstay), # longest length of stay
                      avg_age = mean(age), # average age
                      n_stage_four = sum(cancerstage=="IV") # number of stage IV patients 
                      )
## `summarise()` ungrouping output (override with `.groups` argument)
pat_summ
## # A tibble: 22 x 5
##   docid n_pat longest_los avg_age n_stage_four
##   <chr> <int>       <dbl>   <dbl>        <int>
## 1 1-1       7           6    52.5            0
## 2 1-100     9           7    86.2            0
## 3 1-11      8           7    51.7            1
## # ... with 19 more rows

7.1.5 다중 레벨 데이터 확인

doc_id에 의해 dpat_sum을 inner join 해서, 의사별 환자에 대한 다중 레벨의 데이터를 확인한다.

# data at multiple levels - patients nested in doctors
d %>% 
  inner_join(pat_summ) %>% 
  select(sex, age, lengthofstay, docid, avg_age, longest_los) %>% 
  head(n=3)
## Joining, by = "docid"
## # A tibble: 3 x 6
##   sex      age lengthofstay docid avg_age longest_los
##   <chr>  <dbl>        <dbl> <chr>   <dbl>       <dbl>
## 1 male    65.0            6 1-1      52.5           6
## 2 female  53.9            6 1-1      52.5           6
## 3 male    41.4            5 1-1      52.5           6