7.1 타이디 데이터 철학
(tidyverse
패키지와 함께 불려와 지는) “타이디(tidy)” 데이터 세트를 생성하는tidyr
패키지에 있는 도구들에 대하여 살펴보기로 한다.
타이디 데이터 세트는 다음과 같은 단순한 구조적 규칙을 준수한다:
- 데이터 세트는 변수(컬럼)과 관측치(행)으로 조직화된 값들의 집합이다.
- 변수는 관측치에 대한 동일 속성을 측정해야한다.
- 관측치는 변수로 측정되는 동일한 단위를 나타내야 한다.
타이디 데이터 관습은 데이터를 조직화해야 할 필요가 있을 때마다 “다시 생각하게 만드는 것을” 피하게 해 주는 표준 조직을 제공한다.
좀 더 적극적으로 데이터를 “타이디”하게 만드는 것은 나중에 더 많은 시간을 절약하게 줄 것이다.
7.1.1 분석의 단위
데이터 센트의 각 행이 분석의 단위(unit of anlysis)를 나타내야 한다. 단위는 대상, 또는 대상 내의 시험 또는 주제의 모든 그룹 등이 될 수 있다.
일부 분석은 개별 단위와 종합된 단위를 설명하는 변수들을 포함할 수 있다. 예를 들어, 학생 수준의 분석은 학교 수준의 변수를 포함할 수 있다.
종단적 연구(longitudinal studies)들은 대상 내에서 그리고 대상 간의 변수들을 포함할 수 있다.
다차원 분석에 대해서는 분석의 단위가 일반적으로 가장 낮은 수준이다.
7.1.2 데이터 세트
patient_pt1_dm.csv
파일을 read_csv()
함수로 불러와서 티블 변수 d
에 대입한다.
<- read_csv("data7/patient_pt1_dm.csv") d
##
## -- 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
별 그루핑
데이터 세트 d
를 docid
로 그루핑하여, by_doc
데이터 세트를 생성한다.
# group_by creates a grouped_df (grouped data frame) class structure
<- group_by(d, docid)
by_doc 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
<- summarise(by_doc,
pat_summ 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
에 의해 d
와 pat_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