在 purrr::map 中,在 group_split 之后;如何使用另一列中的元素作为名称从 tibbles 列表中的一列创建命名列表?

问题描述 投票:0回答:1

我正在努力使用 purrr:map 函数引用 tibbles 列表中一列的值来从另一列创建命名列表。任何帮助将不胜感激!

可重现的示例:

library(tidyverse)
library(tibble)
library(dplyr)
library(purrr)

v1 <- rep(letters[1:10], 3)
v2 <- rep(LETTERS[1:3], 10)
v3 <- rnorm(30)

t <- tibble(v1, v2, v3)

t2 <- t %>%
  group_split(v2) %>%
  map(~.x %>% modify_at("v3", ~set_names(.x, "v1")))

#我想使用“v1”中的值作为命名列表中的名称(使用“v3”中的值)。不起作用! #由

set_names()
中的错误引起: #!
nm
(30) 的尺寸必须与
x
(10) 的尺寸兼容。

t2[[1]]$v3

r dplyr tidyverse purrr
1个回答
0
投票

你想要这个:

library(dplyr)
library(purrr)

t %>%
  group_split(v2) %>%
  map(~ set_names(.x$v3, .x$v1))
[[1]]
           a            d            g            j            c            f            i            b            e 
 0.125768861 -2.220447502  0.362207797 -0.431830760  0.805455774  0.321546114 -0.827056265 -1.224760040  0.008170793 
           h 
-0.783951939 

[[2]]
          b           e           h           a           d           g           j           c           f           i 
 1.12432305  0.68200700  0.58304763  0.04008495  0.91584028  0.86049333 -0.68042443 -0.23048205 -1.71889470 -1.03430104 

[[3]]
          c           f           i           b           e           h           a           d           g           j 
 0.61758822 -0.85423696 -1.74924210 -1.25383234 -0.84207937 -0.08451343 -1.42264178 -0.05806052  0.16760775  1.02964839 
© www.soinside.com 2019 - 2024. All rights reserved.