使用 tidyr::unnest_wider() 时,如何根据 chr 向量命名新列
When using tidyr::unnest_wider(), how to name new columns based on chr vector
我有以下数据结构:
library(tibble)
my_tbl <-
tibble::tribble(
~col_x, ~col_y,
"a", list(1, 2, 3),
"b", list(4, 5, 6),
"c", list(7, 8, 9)
)
我想使用 tidyr::unnest_wider()
将 col_y
分隔到列中。这些新列的名称应取自 animal_names
vector:
animal_names <- c("dog", "cat", "zebra")
如何利用 unnest_wider()
应用来自 animal_names
的名称,从而避免以下命名警告:
library(tidyr)
my_tbl %>%
unnest_wider(col_y)
#> New names:
#> * `` -> ...1
#> * `` -> ...2
#> * `` -> ...3
#> New names:
#> * `` -> ...1
#> * `` -> ...2
#> * `` -> ...3
#> New names:
#> * `` -> ...1
#> * `` -> ...2
#> * `` -> ...3
#> # A tibble: 3 x 4
#> col_x ...1 ...2 ...3
#> <chr> <dbl> <dbl> <dbl>
#> 1 a 1 2 3
#> 2 b 4 5 6
#> 3 c 7 8 9
期望输出
## # A tibble: 3 x 4
## col_x dog cat zebra
## <chr> <dbl> <dbl> <dbl>
## 1 a 1 2 3
## 2 b 4 5 6
## 3 c 7 8 9
请注意 将名称添加到嵌套值 before unnest
ing.
library(dplyr)
library(purrr)
my_tbl %>%
mutate(across(col_y, ~map(., .f = ~set_names(.x, animal_names)))) %>%
unnest_wider(col_y)
#> # A tibble: 3 x 4
#> col_x dog cat zebra
#> <chr> <dbl> <dbl> <dbl>
#> 1 a 1 2 3
#> 2 b 4 5 6
#> 3 c 7 8 9
但是,当我们处理大型数据集时,这是一个冗余且昂贵的操作。我们不能通过 unnest_wider()
的 names_repair
参数应用名称吗?
names_repair
除了未嵌套的列外,还需要完整的列名。因此,我们创建一个名称向量,不包括与 'animal_names' 向量连接的 'col_y',并将其用于 names_repair
library(dplyr)
library(tidyr)
nm1 <- c(setdiff(names(my_tbl), 'col_y'), animal_names)
my_tbl %>%
unnest_wider(col_y, names_repair = ~ nm1) %>%
suppressMessages
-输出
# A tibble: 3 × 4
col_x dog cat zebra
<chr> <dbl> <dbl> <dbl>
1 a 1 2 3
2 b 4 5 6
3 c 7 8 9
如果您对消息感到厌烦,可以使用参数 names_sep
(在 tidyr 的最新版本中,1.0 或 1.1),这将使消息静音。因为您使用 names_repair
覆盖值,所以可以将任意值设置为 names_sep=""
.
作者:mstigler
日期:2022-03-04
输出:“reprex::reprex_document”
标题:伍迪-kiwi_reprex.R
library(tidyr)
my_tbl <-
tibble::tribble(
~col_x, ~col_y,
"a", list(1, 2, 3),
"b", list(4, 5, 6),
"c", list(7, 8, 9))
animal_names <- c("dog", "cat", "zebra")
nm1 <- c(setdiff(names(my_tbl), 'col_y'), animal_names)
my_tbl |>
unnest_wider(col_y, names_repair = ~ nm1, names_sep = "")
#> # A tibble: 3 × 4
#> col_x dog cat zebra
#> <chr> <dbl> <dbl> <dbl>
#> 1 a 1 2 3
#> 2 b 4 5 6
#> 3 c 7 8 9
由 reprex package (v2.0.0)
于 2022-03-04 创建
我有以下数据结构:
library(tibble)
my_tbl <-
tibble::tribble(
~col_x, ~col_y,
"a", list(1, 2, 3),
"b", list(4, 5, 6),
"c", list(7, 8, 9)
)
我想使用 tidyr::unnest_wider()
将 col_y
分隔到列中。这些新列的名称应取自 animal_names
vector:
animal_names <- c("dog", "cat", "zebra")
如何利用 unnest_wider()
应用来自 animal_names
的名称,从而避免以下命名警告:
library(tidyr)
my_tbl %>%
unnest_wider(col_y)
#> New names:
#> * `` -> ...1
#> * `` -> ...2
#> * `` -> ...3
#> New names:
#> * `` -> ...1
#> * `` -> ...2
#> * `` -> ...3
#> New names:
#> * `` -> ...1
#> * `` -> ...2
#> * `` -> ...3
#> # A tibble: 3 x 4
#> col_x ...1 ...2 ...3
#> <chr> <dbl> <dbl> <dbl>
#> 1 a 1 2 3
#> 2 b 4 5 6
#> 3 c 7 8 9
期望输出
## # A tibble: 3 x 4
## col_x dog cat zebra
## <chr> <dbl> <dbl> <dbl>
## 1 a 1 2 3
## 2 b 4 5 6
## 3 c 7 8 9
请注意 unnest
ing.
library(dplyr)
library(purrr)
my_tbl %>%
mutate(across(col_y, ~map(., .f = ~set_names(.x, animal_names)))) %>%
unnest_wider(col_y)
#> # A tibble: 3 x 4
#> col_x dog cat zebra
#> <chr> <dbl> <dbl> <dbl>
#> 1 a 1 2 3
#> 2 b 4 5 6
#> 3 c 7 8 9
但是,当我们处理大型数据集时,这是一个冗余且昂贵的操作。我们不能通过 unnest_wider()
的 names_repair
参数应用名称吗?
names_repair
除了未嵌套的列外,还需要完整的列名。因此,我们创建一个名称向量,不包括与 'animal_names' 向量连接的 'col_y',并将其用于 names_repair
library(dplyr)
library(tidyr)
nm1 <- c(setdiff(names(my_tbl), 'col_y'), animal_names)
my_tbl %>%
unnest_wider(col_y, names_repair = ~ nm1) %>%
suppressMessages
-输出
# A tibble: 3 × 4
col_x dog cat zebra
<chr> <dbl> <dbl> <dbl>
1 a 1 2 3
2 b 4 5 6
3 c 7 8 9
如果您对消息感到厌烦,可以使用参数 names_sep
(在 tidyr 的最新版本中,1.0 或 1.1),这将使消息静音。因为您使用 names_repair
覆盖值,所以可以将任意值设置为 names_sep=""
.
作者:mstigler 日期:2022-03-04 输出:“reprex::reprex_document” 标题:伍迪-kiwi_reprex.R
library(tidyr)
my_tbl <-
tibble::tribble(
~col_x, ~col_y,
"a", list(1, 2, 3),
"b", list(4, 5, 6),
"c", list(7, 8, 9))
animal_names <- c("dog", "cat", "zebra")
nm1 <- c(setdiff(names(my_tbl), 'col_y'), animal_names)
my_tbl |>
unnest_wider(col_y, names_repair = ~ nm1, names_sep = "")
#> # A tibble: 3 × 4
#> col_x dog cat zebra
#> <chr> <dbl> <dbl> <dbl>
#> 1 a 1 2 3
#> 2 b 4 5 6
#> 3 c 7 8 9
由 reprex package (v2.0.0)
于 2022-03-04 创建