我有以下数据结构:
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
向量中提取:
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
之前,@akrun建议为嵌套的值添加名称。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
参数应用名称呢?
New names:
吗?我认为警告是在names_repair
之前触发的,因为list
列没有命名。 - akrununnest_wider()
自己的参数,警告就不会显示。你有什么想法可以让警告消失吗? - EmmansuppressMessages(my_tbl %>% unnest_wider(col_y, names_repair = ~ nm1))
进行包装。 - akrunsuppressMessages
来将其静音。 - akrun