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

qrjkbowd  于 9个月前  发布在  其他
关注(0)|答案(2)|浏览(89)

我正在使用purrr:map函数从tibles列表中的一列引用值以从另一列创建命名列表。任何帮助都将不胜感激!
可复制的示例:

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)的大小兼容。

t21$v3

wmomyfyw

wmomyfyw1#

你想要这个:

library(dplyr)
library(purrr)

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

named_vector1 <- t2[[1]]

t2
named_vector1

个字符

ezykj2lf

ezykj2lf2#

使用deframe代替:

t %>% 
  group_split(v2, .keep = FALSE) %>%
  map(deframe)

[[1]]
         a          d          g          j          c          f          i          b          e          h 
 0.6980159 -1.0698884  0.9248987 -1.1137024  0.1976790  1.3918101 -0.9205889 -0.5747299  0.3631078 -1.0331644 

[[2]]
         b          e          h          a          d          g          j          c          f          i 
-1.8588877 -1.1719188  1.0250352 -1.0637924  0.4415625  1.6617184  1.1814334  0.4438979 -0.4813941  0.6253411 

[[3]]
         c          f          i          b          e          h          a          d          g          j 
-0.4879884 -0.9201849  0.5024855  1.3433119  1.0420189 -1.3437926  1.4564144  0.2931938 -1.1779862  0.8228465

字符串
在基础R中:

with(t, split(setNames(v3,v1),v2))
$A
         a          d          g          j          c          f          i          b          e          h 
 0.6980159 -1.0698884  0.9248987 -1.1137024  0.1976790  1.3918101 -0.9205889 -0.5747299  0.3631078 -1.0331644 

$B
         b          e          h          a          d          g          j          c          f          i 
-1.8588877 -1.1719188  1.0250352 -1.0637924  0.4415625  1.6617184  1.1814334  0.4438979 -0.4813941  0.6253411 

$C
         c          f          i          b          e          h          a          d          g          j 
-0.4879884 -0.9201849  0.5024855  1.3433119  1.0420189 -1.3437926  1.4564144  0.2931938 -1.1779862  0.8228465

相关问题