Tibble 이해와 as_tibble() 함수

1. Tibble 이란?

Tibble 은 R에서 데이터를 다루기 위한 데이터 구조 중 하나로 R의 데이터 프레임(data.frame)을 좀 더 유용하게 확장한 것으로 보면 됩니다.

Tibble 은 tidyverse 패키지의 일부로 제공되며, 데이터 프레임과 호환성이 있습니다. Tibble은 데이터 출력이 보기 좋고, 부분적으로 큰 데이터를 처리할 때 유용하며, 변수 유형이나 변수 이름을 다룰 때 더 간편합니다.

1) 주요 특징

  • 출력: Tibble은 콘솔에 출력될 때 가독성이 높습니다. 먼저 10개의 행만 보여주고, 전체 열을 보여주지 않을 수도 있습니다.
  • 열 데이터 유형: Tibble은 열 데이터 유형을 더 잘 유지합니다. 예를 들어, 문자형 데이터는 문자형으로 유지됩니다.
  • 열과 행 부분 선택: Tibble은 [[]] 또는 $을 사용할 때도 더 안정적입니다. 예를 들어, 존재하지 않는 열 이름을 요청하면 에러를 반환합니다.

2) Tibble 생성하기

Tibble을 생성하는 방법은 여러 가지입니다.

  • tibble() 함수를 사용하여 직접 생성:
library(tibble) my_tibble <- tibble(x = 1:5, y = 1, z = x ^ 2 + y)
  • 기존의 데이터 프레임을 as_tibble() 함수로 변환:
my_data_frame <- data.frame(x = 1:5, y = 1, z = x ^ 2 + y) my_tibble <- as_tibble(my_data_frame)
  • tibble() 함수를 사용하여 직접 생성: library(tibble) my_tibble <- tibble(x = 1:5, y = 1, z = x ^ 2 + y)
  • 기존의 데이터 프레임을 as_tibble() 함수로 변환: my_data_frame <- data.frame(x = 1:5, y = 1, z = x ^ 2 + y) my_tibble <- as_tibble(my_data_frame)

3) Tibble 사용하기

Tibble은 데이터 프레임과 거의 유사하게 작동하므로, 대부분의 데이터 프레임 함수와 호환됩니다.

# 열 선택
my_tibble$x
# 행 선택
my_tibble[1:2,]
# dplyr 사용
library(dplyr)
my_tibble %>% filter(x > 2)

4) Tibble 추가 기능

Tibble은 또한 몇 가지 추가적인 기능과 옵션을 제공합니다. 예를 들어, 데이터 유형을 강제할 수 있고, 행과 열에 대한 메타 데이터를 추가할 수 있습니다.

Tibble은 기존의 데이터 프레임보다 다루기 쉽고, 가독성이 높으며, 큰 데이터 셋을 효과적으로 다룰 수 있습니다.

tibble은 R에서 데이터를 다룰 때 사용되는 데이터 프레임(data.frame)의 하위 클래스입니다. tibble은 tidyverse의 일부로, 다양한 방법으로 데이터 처리를 더 간편하고 효율적으로 해줍니다. as_tibble() 함수는 주어진 데이터 객체를 tibble 객체로 변환해줍니다.

3) Tibble 데이터 타입 확인

tibble 데이터 타입을 확인하기 위해서는 tibble 패키지를 설치해야 합니다

install.packages("tibble")

tibble 데이터는 is_tibble로 확인하면 된다. class(ti_iris)의 출력값 [1] “tbl_df” “tbl” “data.frame”는 ti_iris 객체가 여러 클래스를 가지고 있다는 것을 나타냅니다. R에서는 하나의 객체가 여러 클래스를 가질 수 있으며, 이는 객체의 상속 구조를 반영합니다.

  1. “tbl_df”: 이는 ti_iris가 tibble 형태의 데이터 프레임임을 나타냅니다. tbl_df는 tibble 패키지에서 정의된 클래스입니다.
  2. “tbl”: 이 클래스는 tbl_df의 상위 클래스로, tbl 객체의 기본적인 특성을 나타냅니다. 이것은 보통 tbl_df와 함께 나타나며, tibble 패키지에서 정의됩니다.
  3. “data.frame”: 이는 ti_iris가 기본적으로 일반적인 R 데이터 프레임이기도 하다는 것을 나타냅니다. data.frame은 R의 기본 클래스 중 하나입니다.
is_tibble(ti_iris)
TRUE
class(ti_iris)
[1] "tbl_df"     "tbl"        "data.frame"

2. as_tibble() 함수 이해

as_tibble() 함수는 다양한 데이터 객체(예: data.frame, matrix 등)를 tibble 형태로 변환합니다. tibble은 데이터 프레임과 유사하지만 몇 가지 중요한 차이점이 있습니다. 예를 들어, tibble은 데이터 출력을 더 깔끔하게 해주고, 변수 유형을 더 유연하게 다룰 수 있습니다.

as_tibble() 함수는 데이터를 tibble 형태로 변환하는데 사용되며, 다양한 옵션을 지원합니다. 아래는 그 옵션들에 대한 자세한 설명입니다:

1) x

첫 번째 인자 x는 변환하려는 데이터입니다. 이것은 벡터, 리스트, 데이터 프레임, 행렬 등 여러 형태를 가질 수 있습니다.

as_tibble(data.frame(x = 1:3, y = 4:6))

2) .rows

.rows 옵션은 불러올 행의 수 또는 범위를 지정합니다. 이를 사용하면 큰 데이터셋에서 일부 행만 선택할 수 있습니다.

as_tibble(iris, .rows = 1:5)

3) .name_repair

.name_repair 옵션은 열 이름을 어떻게 다룰지 지정합니다. 이 옵션은 다음 값을 가질 수 있습니다:

  • “minimal”: 아무런 수정도 하지 않습니다.
  • “unique”: 열 이름을 고유하게 만듭니다.
  • “universal”: 유효한 열 이름으로 변환합니다.
  • “check_unique”: 열 이름이 고유한지 확인하고, 그렇지 않으면 에러를 발생시킵니다.
as_tibble(data.frame(x = 1, x = 2), .name_repair = "unique")

4) .col_names (deprecated)

이 옵션은 이전 버전에서 열 이름을 지정하는 데 사용되었으나 현재는 사용되지 않습니다. 대신 .name_repair을 사용하세요.

5) … (deprecated)

이것은 추가적인 인자를 받기 위한 옵션으로, 현재는 사용되지 않습니다.

예제:

# .name_repair을 이용한 열 이름 수정
as_tibble(data.frame(` ` = 1:3, x = c('a', 'b', 'c')), .name_repair = "universal")
# .rows를 이용한 일부 행만 선택
as_tibble(mtcars, .rows = 1:5)

이러한 옵션들을 조합하면 매우 다양한 데이터 변환 작업을 수행할 수 있습니다.

3. as_tibble() 함수 주요 사용법

1) 기본 사용법

  • as_tibble(x, …)

x: 대상 데이터 객체
...: 추가적인 옵션 인수

2) 데이터 프레임을 tibble로 변환

# tibble 패키지 로드
library(tibble)
# 데이터 프레임 생성
df <- data.frame(name = c("Alice", "Bob", "Carol"),
                 age = c(30, 40, 50))
# as_tibble로 변환
df_tibble <- as_tibble(df)
# 결과 출력
print(df_tibble)

3) 행렬을 tibble로 변환

# 행렬 생성
mat <- matrix(1:6, nrow = 2)
# as_tibble로 변환
mat_tibble <- as_tibble(mat)
# 결과 출력
print(mat_tibble)

4) 리스트를 tibble로 변환

리스트의 경우, 각 리스트 요소는 tibble의 각 열이 됩니다.

# 리스트 생성
lst <- list(name = c("Alice", "Bob"), age = c(30, 40))
# as_tibble로 변환
lst_tibble <- as_tibble(lst)
# 결과 출력
print(lst_tibble)

4. as_tibble() 복잡한 예시

1) 중첩된 데이터

as_tibble 함수는 리스트의 리스트와 같은 중첩된 데이터 구조도 처리할 수 있습니다.

# 중첩된 리스트
nested_list <- list(
  meta = list(name = "sample", version = "1.0"),
  data = list(
    id = 1:3,
    value = c("a", "b", "c")
  )
)
# 중첩된 리스트를 tibble로 변환
nested_tibble <- as_tibble(nested_list)
print(nested_tibble)

여기서 nested_tibble은 meta와 data라는 두 개의 열을 가지며, 각 열은 다시 리스트로 이루어져 있습니다.

2) 데이터 프레임과 리스트의 조합

데이터 프레임의 일부 열이 리스트로 이루어져 있을 때도 as_tibble 함수가 유용합니다.

# 리스트를 포함한 데이터 프레임
df_with_list <- data.frame(
  id = 1:3,
  meta = I(list(
    list(name = "Alice", age = 30),
    list(name = "Bob", age = 40),
    list(name = "Carol", age = 50)
  ))
)
# as_tibble로 변환
tibble_with_list <- as_tibble(df_with_list)
print(tibble_with_list)

이렇게 as_tibble 함수는 다양한 옵션과 함께 복잡한 데이터 구조도 유연하게 다룰 수 있습니다. 복잡한 데이터 분석이나 전처리 작업에서 이 함수의 다양한 기능을 활용하면 더욱 효율적인 결과를 얻을 수 있습니다.

R 프로그램을 다운로드하려면 R 프로그램 공식 웹사이트(https://www.r-project.org/)에서 다운로드 링크를 클릭하여 다운로드할 수 있습니다.

R 프로그램 모두보기 :