12.1 변수 레이블

변수 레이블(Variable labels)을 처리하는 R의 능력은 다소 불만족 스럽습니다. 변수 레이블은 변수에 대한 설명을 담고 있는 문자열입니다. 벡터 개체의 레이블 속성을 label(x)x의 레이블 속성을 검색합니다. label(x) <- "레이블"은 레이블의 속성을 지정합니다.

Hmisc 패키지를 사용하면 일부 라벨링 기능을 활용할 수 있습니다.

# 패키지 불러오기
# install.packages("Hmisc")
library(Hmisc)
## Loading required package: lattice
## Loading required package: survival
## Loading required package: Formula
## 
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:dplyr':
## 
##     src, summarize
## The following objects are masked from 'package:base':
## 
##     format.pval, units
# df 데이터 프레임을 생성합니다.
df <- data.frame(name = c("Kim", "Lee", "Park"),
                 gender = c("Female", "Male", "Female"),
                 myvar1 = c(1, NA, 3),
                 myvar2 = c(1, 3, 5))
str(df)
## 'data.frame':    3 obs. of  4 variables:
##  $ name  : chr  "Kim" "Lee" "Park"
##  $ gender: chr  "Female" "Male" "Female"
##  $ myvar1: num  1 NA 3
##  $ myvar2: num  1 3 5
# df$name 컬럼에 레이블을 설정합니다.
label(df$name)                              # df$name에 레이블이 지정되어 있지 않습니다.
## [1] ""
label(df$name) <- c("회원들의 이름입니다.")    # df$name에 래이블을 지정합니다.
label(df$name)                              # df$name의 레이블을 확인합니다.
## [1] "회원들의 이름입니다."
attributes(df$name)                         # df$name의 속성에서 label 속성이 확인되고, 
## $label
## [1] "회원들의 이름입니다."
## 
## $class
## [1] "labelled"  "character"
                                            #   class 속성에 labelled가 추가되어 있습니다.
class(df$name)                              # df$name의 클래스를 확인합니다.
## [1] "labelled"  "character"
# df의 통계적 요약정보를 확인합니다.
describe(df)                                # df의 통계적 요약정보를 보여줍니다. df$name에 레이블이 출력됩니다.
## df 
## 
##  4  Variables      3  Observations
## --------------------------------------------------------------------------------
## name : 회원들의 이름입니다. 
##        n  missing distinct 
##        3        0        3 
##                             
## Value        Kim   Lee  Park
## Frequency      1     1     1
## Proportion 0.333 0.333 0.333
## --------------------------------------------------------------------------------
## gender 
##        n  missing distinct 
##        3        0        2 
##                         
## Value      Female   Male
## Frequency       2      1
## Proportion  0.667  0.333
## --------------------------------------------------------------------------------
## myvar1 
##        n  missing distinct     Info     Mean      Gmd 
##        2        1        2        1        2        2 
##                   
## Value        1   3
## Frequency    1   1
## Proportion 0.5 0.5
## --------------------------------------------------------------------------------
## myvar2 
##        n  missing distinct     Info     Mean      Gmd 
##        3        0        3        1        3    2.667 
##                             
## Value          1     3     5
## Frequency      1     1     1
## Proportion 0.333 0.333 0.333
## --------------------------------------------------------------------------------
summary(df)                                 # 레이블이 표시되지 않습니다.
##      name              gender              myvar1        myvar2 
##  Length:3           Length:3           Min.   :1.0   Min.   :1  
##  Class1:labelled    Class :character   1st Qu.:1.5   1st Qu.:2  
##  Class2:character   Mode  :character   Median :2.0   Median :3  
##  Mode  :character                      Mean   :2.0   Mean   :3  
##                                        3rd Qu.:2.5   3rd Qu.:4  
##                                        Max.   :3.0   Max.   :5  
##                                        NA's   :1

안타깝게도 레이블은 describe() 함수와 같이 Hmisc 패키지에서 제공하는 함수에만 적용됩니다.

다른 옵션은 names() 함수를 이용하여 변수 레이블변수 이름으로 사용한 다음, 위치 색인으로 변수를 참조하는 것입니다. 그런데 이 방법은 변수명이 너무 길어지는 문제가 있습니다.

## names() 함수를 이용하여 변수 레이블을 변수명으로 사용할 수 있습니다.
attributes(df)                               # names 속성이 변수명으로 저장되어 있습니다.
## $names
## [1] "name"   "gender" "myvar1" "myvar2"
## 
## $row.names
## [1] 1 2 3
## 
## $class
## [1] "data.frame"
names(df)[3] <- "이것은 세번째 변수의 레이블입니다."
str(df)                                      # 3번째 변수명이 변경되었습니다.
## 'data.frame':    3 obs. of  4 variables:
##  $ name                              : 'labelled' chr  "Kim" "Lee" "Park"
##   ..- attr(*, "label")= chr "회원들의 이름입니다."
##  $ gender                            : chr  "Female" "Male" "Female"
##  $ 이것은 세번째 변수의 레이블입니다.: num  1 NA 3
##  $ myvar2                            : num  1 3 5
attributes(df)                               # names 속성의 3번째 변수명이 변경되었습니다.
## $names
## [1] "name"                               "gender"                            
## [3] "이것은 세번째 변수의 레이블입니다." "myvar2"                            
## 
## $row.names
## [1] 1 2 3
## 
## $class
## [1] "data.frame"
df[3]                                        # df의 3번째 변수 값을 출력합니다.
##   이것은 세번째 변수의 레이블입니다.
## 1                                  1
## 2                                 NA
## 3                                  3
names(df)[3] <- "myvar1"