본문 바로가기
R 프로그래밍/R advance

[R데이터구조]Tibble

by 찐남 2021. 7. 15.
본 포스팅은 R for Data Science 를 기반으로 작성되었습니다. 

 

1. 소개

 

R의 전통적인 데이터 구조는 데이터 프레임(data.frame)입니다. 이번 장에서는 "tibbles"에 대해서 알아보기로 하겠습니다. Tibble은 데이터 프레임이지만 삶을 조금 더 쉽게 만들기 위해 일부 오래된 동작을 조금 조정합니다. R은 매우 오래된 언어이며, 10~20년 전에는 유용했던 일부 기능이 이제는 방해가 되기도 합니다. 기존 코드를 깨뜨리지 않고 기본 R을 변경하는 것은 어렵기 때문에 대부분의 혁신은 신규 패키지에서 발생합니다. 여기에서 우리는 tidyverse에서 작업을 좀 더 쉽게 만들어주는 데이터 프레임을 제공하는 tibble 패키지에 대해 좀 더 자세히 알아보겠습니다. 대부분의 경우 tibbles과 data frame이라는 용어를 같은 의미로 사용합니다. R의 내장 data frame에 좀 더 특별한 주의를 기울이고 싶을 때 그것을 data.frame이라고 부르겠습니다. 이 장에서 tibbles에 대해 더 알고 싶다면 vignette("tibble")을 만나 보시면 됩니다. 

 



 

 

1.1. 전제 조건

이번 장에서 우리는 코어 tidyverse의 일부인 tibble 패키지를 탐색해 보겠습니다. 

 

 

2. tibbles 생성

 

이번 장에서 사용할 거의 모든 함수는 Tibble을 생성합니다. Tibble은 Tidyverse의 통합 기능 중 하나이기 때문입니다. 대부분의 다른 R 패키지는 일반 데이터 프레임을 사용하므로 as_tibble() 함수를 사용해서 데이터 프레임을 tibble로 강제 변환할 수 있습니다. 

 

 

tibble() 함수를 사용하여 개별 vector에서 새로운 tibble을 만들 수 있습니다. tibble() 함수는 길이가 1인 input을 자동으로 재활용하고 아래와 같이 방금 생성한 변수를 참조할 수 있도록 합니다.

 

 

data.frame()에 이미 익숙하다면 tibble()은 훨씬 적은 작업을 수행합니다. input 형태를 변경하지 않으며(예: 문자열 변수를 factor형으로 변환하지 않습니다!), 변수 이름을 변경하지 않으며, 행 이름을 생성하지도 않습니다.

 

tibble에 유효한 R 변수 이름이 아닌 열 이름, 즉 비구문 이름이 있을 수 있습니다. 예를 들어 문자로 시작하지 않거나 공백과 같은 특이한 문자를 포함할 수 있습니다. 이러한 변수를 참조하려면 backticks(`)으로 변수를 둘러싸야 합니다. 

 

 

또한 ggplot2, dplyr, tinter와 같은 다른 패키지에서 이러한 변수로 작업할 때 backticks(`)이 필요합니다.

 

tibble을 만드는 또 다른 방법은 tribble() 함수를 사용하는 것인데, tribble은 transposed tibble의 줄임말입니다. tribble()함수는 코드의 자료 입력을 위해 정의됩니다. 열 머리글은 수식으로 정의되고(예: ~로 시작) 항목은 쉼표로 구분니다. 이를 통해 소량의 데이터를 읽기 쉬운 형태로 배치할 수 있습니다.

 

 

헤더가 어디에 있는지 명확히 하기 위해 아래와 같이 종종 주석(#으로 시작하는 줄)을 추가합니다.

 

 

 



 

 

3. Tibbles vs. data.frame

 

tibble과 고전적인 data.frame의 사용에는 두 가지 주요 차이점(인쇄 및 부분 설정)이 있습니다.

 

3.1. 인쇄

 

Tibbles에는 화면에 맞는 처음 10개 행과 모든 열만 표시하는 세련된 인쇄 방법이 있습니다. 이렇게 하면 대용량 데이터 작업을 훨씬 쉽게 할 수 있습니다. 이름 외에도 각 열은 str() 함수에서 빌린 멋진 기능인 데이터 유형을 알려 줍니다.

 

 

Tibbles는 큰 데이터 프레임을 인쇄할 때 실수로 콘솔을 압도하지 않도록 설계되었습니다. 그러나 때로는 기본 디스플레이보다 더 많은 출력이 필요합니다. 여기에 도움이 될 수 있는 몇 가지 옵션이 있습니다.

 

먼저 데이터 프레임을 명시적으로 print()하고 행 수(n)와 디스플레이 너비를 제어할 수 있습니다. 너비 = Inf는 모든 열을 표시합니다.

 

 

옵션을 설정하여 기본 인쇄 동작을 제어할 수도 있습니다.

  • options(tibble.print_max = n, tibble.print_min = m): n 행 이상인 경우 m 행만 인쇄합니다. 항상 모든 행을 표시하려면 options(tibble.print_min = Inf)를 사용하시면 됩니다. 
  • options(tibble.width = Inf)를 사용하여 화면 너비에 관계없이 항상 모든 열을 인쇄합니다.

패키지 도움말을 보면 전체 옵션 목록을 볼 수 있습니다(package?tibble). 

 

마지막 옵션은 RStudio의 내장 데이터 뷰어를 사용하여 전체 데이터 셋의 스크롤 가능한 보기를 얻는 것입니다. 이것은 또한 긴 조작 체인의 끝에서 종종 유용합니다. 

 

nycflights13::flights %>% View()

 

3.2. 부분 설정

 

지금까지 배운 모든 도구는 완전한 데이터 프레임에서 작동했습니다. 단일 변수를 추출하려면 새로운 도구인  $ and [[ 가 필요합니다. [[는 이름이나 위치로 추출할 수 있습니다. $는 이름으로만 추출하지만 입력이 조금 적습니다. 

 

파이프에서 이것을 사용하려면 특별한 자리 표시자(.)를 사용해야 합니다.

 

data.frame과 비교할 때 tibble은 더 엄격합니다. 부분 일치를 수행하지 않으며 접근하려는 열이 존재하지 않으면 경고를 생성합니다.

 

4. 이전 코드와의 상호 작용

 

일부 이전 기능은 tibble에서 작동하지 않습니다. 일부 오래된 함수를 우연히 만나면 as.data.frame()을 사용하여 tibble을 data.frame으로 전환해서 사용합니다. 

 

 

일부 오래된 함수가 tibble에서 작동하지 않는 주된 이유는 [ 함수입니다. dplyr::filter() 및 dplyr::select()를 사용하면 더 명확한 코드로 동일한 문제를 해결할 수 있기 때문에 [ 함수를 많이 사용하지 않습니다(그러나 벡터 부분 집합에서 이에 대해 조금 아셔야 합니다). 기본 R 데이터 프레임에서 [ 함수는 때때로 데이터 프레임을 반환하고 때로는 벡터를 반환합니다. tibble을 사용하면 [ 함수는 항상 다른 tibble을 반환합니다.

 

 

 

반응형

댓글