list_rbind를 사용하여 이름이 있지만 0행인 tibble을 목록에 보관하는 방법
다음 코드는 문제를 보여줍니다.
library(purrr)
# 0행 tibble 만들기
tibble1 <- tibble(x = c(), y = c())
tibble2 <- tibble(x = c(1, 2), y = c(3, 4))
# 목록에 tibble 추가
tibble_list <- list(tibble1, tibble2)
# `list_rbind` 사용
combined_tibble <- list_rbind(tibble_list)
# 결과 확인
combined_tibble
#> # A tibble: 2 x 2
#> x y
#> <dbl> <dbl>
#> 1 NA NA
#> 2 1.00 3.00
결과에서 볼 수 있듯이 0행 tibble (tibble1
)은 결합된 tibble에서 사라졌습니다.
이 문제를 해결하기 위해 map
함수와 ~
연산자를 사용하여 tibble을 리스트에 추가하기 전에 이름을 변경할 수 있습니다. 다음 코드는 이 방법을 보여줍니다.
# tibble 이름 변경
tibble_list <- map(tibble_list, ~ .x %>% rename(.id = "id"))
# `list_rbind` 사용
combined_tibble <- list_rbind(tibble_list)
# 결과 확인
combined_tibble
#> # A tibble: 2 x 3
#> id x y
#> <chr> <dbl> <dbl>
#> 1 <NA> NA NA
#> 2 <NA> 1.00 3.00
이 코드에서는 map
함수를 사용하여 tibble_list
의 각 tibble에 대해 다음 작업을 수행합니다.
~
연산자를 사용하여 tibble을 익명 함수의 인수로 전달합니다.rename
함수를 사용하여 tibble의 이름을id
로 변경합니다.
이렇게 하면 0행 tibble도 결합된 tibble에 포함됩니다.
참고
예제 코드
library(purrr)
# 0행 tibble 만들기
tibble1 <- tibble(x = c(), y = c())
tibble2 <- tibble(x = c(1, 2), y = c(3, 4))
# tibble 이름 변경
tibble_list <- map(tibble_list, ~ .x %>% rename(.id = "id"))
# `list_rbind` 사용
combined_tibble <- list_rbind(tibble_list)
# 결과 확인
combined_tibble
#> # A tibble: 2 x 3
#> id x y
#> <chr> <dbl> <dbl>
#> 1 <NA> NA NA
#> 2 <NA> 1.00 3.00
이 코드는 다음과 같이 작동합니다.
tibble1
과tibble2
라는 두 개의 tibble을 만듭니다.map
함수를 사용하여tibble_list
의 각 tibble에 대해 다음 작업을 수행합니다.list_rbind
함수를 사용하여tibble_list
의 tibble을 하나의 tibble로 결합합니다.combined_tibble
변수에 결합된 tibble을 저장합니다.combined_tibble
변수를 출력하여 결과를 확인합니다.
결과는 다음과 같습니다.
# A tibble: 2 x 3
id x y
<chr> <dbl> <dbl>
1 <NA> NA NA
2 <NA> 1.00 3.00
첫 번째 tibble은 0행 tibble이지만 id
라는 이름으로 결합된 tibble에 포함됩니다.
참고
list_rbind
를 사용하지 않고 이름이 있지만 0행인 tibble을 목록에 보관하는 방법
do.call 함수 사용
do.call
함수를 사용하여 rbind
함수를 여러 tibble에 적용하고 결과를 목록에 저장할 수 있습니다. 다음 코드는 이 방법을 보여줍니다.
library(purrr)
# 0행 tibble 만들기
tibble1 <- tibble(x = c(), y = c())
tibble2 <- tibble(x = c(1, 2), y = c(3, 4))
# `do.call` 사용
tibble_list <- do.call(rbind.list, list(tibble1, tibble2))
# 결과 확인
tibble_list
#> [[1]]
#> # A tibble: 0 x 0
#>
#> [[2]]
#> # A tibble: 2 x 2
#> x y
#> <dbl> <dbl>
#> 1 1.00 3.00
#> 2 2.00 4.00
rbind.list
함수를 만들고rbind
함수를 여러 tibble에 적용하도록 설정합니다.do.call
함수를 사용하여rbind.list
함수를tibble_list
의 tibble에 적용합니다.tibble_list
변수에 결과를 저장합니다.
[[1]]
# A tibble: 0 x 0
[[2]]
# A tibble: 2 x 2
x y
<dbl> <dbl>
1 1.00 3.00
2 2.00 4.00
첫 번째 tibble은 0행 tibble이지만 tibble_list
목록에 포함됩니다.
lapply 함수 사용
library(purrr)
# 0행 tibble 만들기
tibble1 <- tibble(x = c(), y = c())
tibble2 <- tibble(x = c(1, 2), y = c(3, 4))
# `lapply` 사용
tibble_list <- lapply(list(tibble1, tibble2), rbind)
# 결과 확인
tibble_list
#> [[1]]
#> # A tibble: 0 x 0
#>
#> [[2]]
#> # A tibble: 2 x 2
#> x y
#> <dbl> <dbl>
#> 1 1.00 3.00
#> 2 2.00 4.00
이 코드는 do.call
을 사용하는 코드와 유사하지만 lapply
함수를 사용하여 rbind
함수를 여러 tibble에 적용합니다.
bind_rows 함수 사용
bind_rows
함수는 dplyr
패키지에서 제공되며 여러 tibble을 하나의 tibble로 결합하는 데 사용할 수 있습니다. 다음 코드는 이 방법을 보여줍니다.
library(dplyr)
# 0행 tibble 만들기
tibble1 <- tibble(x = c(), y = c())
tibble2 <- tibble(x = c(1, 2), y = c(3, 4))
# `bind_rows` 사용
combined_tibble <- bind_rows(tibble1, tibble2)
# 결과 확인
combined_tibble
#> # A tibble: 2 x 2
#> x y
#> <dbl> <dbl>
#> 1 1.00 3.00
#> 2 2.00 4.00
r purrr