如何使用purrr根据另一列中的值提取列表列中的元素

如何使用purrr根据另一列中的值提取列表列中的元素,r,purrr,R,Purrr,如何使用purrr根据另一列中的值在列表列中查找元素 例如,假设我有一个简单的tibble,有两列两行。第二列是列表列,两行都以列表的形式显示“字母”向量。第一列显示了我要提取的列表元素 library(dplyr) library(purrr) lets <- tibble(posn = 1:2, lets_list = list(letters, letters)) %>% glimpse() 它返回一个新列“lets_sel”,其值为“b

如何使用purrr根据另一列中的值在列表列中查找元素

例如,假设我有一个简单的tibble,有两列两行。第二列是列表列,两行都以列表的形式显示“字母”向量。第一列显示了我要提取的列表元素

library(dplyr)
library(purrr)

lets <- tibble(posn = 1:2,
               lets_list = list(letters, letters)) %>% 
  glimpse()
它返回一个新列“lets_sel”,其值为“b”,因为这是字母向量的第二个元素:

# A tibble: 2 x 3
   posn lets_list  lets_sel
  <int> <list>     <chr>   
1     1 <chr [26]> b       
2     2 <chr [26]> b  
以及许多变化,例如:

lets %>% 
  mutate(lets_sel = lets_list[[posn]])
但这会返回错误的结果,结果为“b”和“b”,而不是“a”和“b”:

#一个tible:2x3
posn lets_list lets_sel
11b
2 b

您必须使用
map2\u chr
,因为这需要两个参数

lets %>% 
   mutate(lets_sel = map2_chr(lets_list, posn,~.x[.y]))

 A tibble: 2 x 3
   posn lets_list  lets_sel
  <int> <list>     <chr>   
1     1 <chr [26]> a       
2     2 <chr [26]> b     
让%>%
突变(let_sel=map2_chr(let_list,posn,~.x[.y]))
一个tibble:2x3
posn lets_list lets_sel
11A
2 b

非常感谢@onyanbu。你的解决方案非常有效。
lets %>% 
  mutate(lets_sel = map_chr(lets_list, posn))

> lets %>% 
+   mutate(lets_sel = map_chr(lets_list, posn))
Error in mutate_impl(.data, dots) : 
  Evaluation error: Result 1 is not a length 1 atomic vector.
lets %>% 
  mutate(lets_sel = lets_list[[posn]])
# A tibble: 2 x 3
   posn lets_list  lets_sel
  <int> <list>     <chr>   
1     1 <chr [26]> b       
2     2 <chr [26]> b   
lets %>% 
   mutate(lets_sel = map2_chr(lets_list, posn,~.x[.y]))

 A tibble: 2 x 3
   posn lets_list  lets_sel
  <int> <list>     <chr>   
1     1 <chr [26]> a       
2     2 <chr [26]> b