【问题标题】:How to map over a list of lists in dataframe in R? (tidyverse pipeline)如何映射R中数据框中的列表列表? (tidyverse 管道)
【发布时间】:2021-05-30 13:06:25
【问题描述】:

我正在尝试添加一个整数向量的元素,这些元素嵌套在一个两级列表中。

我想出了这个解决方案,但我认为它有点不常见,所以我正在寻找另一种替代方案:

df <- tibble(
  a = list(list(c(1, 2), c(3, 4)), list(c(1, 2), c(3, 4)))
)

df %>% 
  mutate(
   b = a %>% modify_depth(2, sum) %>% map(unlist)
  )

它给出了正确的解决方案。但我希望更多地使用map 解决方案而不是modify

# A tibble: 2 x 2
  a          b        
  <list>     <list>   
1 <list [2]> <dbl [2]>
2 <list [2]> <dbl [2]>

查看模式下的解决方案:

【问题讨论】:

  • map_depth
  • map 不适用于嵌套列表。
  • 我建议使用rrapply,因为它适用于任何深度rrapply::rrapply(df$a, f = function(x) sum(x))
  • 你会说唯一的解决方案是*_depth吗? (只有咕噜声)
  • 因为map 在循环列表中的作用类似于lapply。如果列表是嵌套的,则需要嵌套映射,这基本上是_depth 所做的。

标签: r list dictionary tidyverse


【解决方案1】:

如果我们不知道深度并且list元素有多个深度或相同深度,rrapply会更通用

libary(dplyr)
library(purrr)
df %>%
    mutate(b = rrapply::rrapply(a, f = sum) %>%
                   map(unlist))

-输出

# A tibble: 2 x 2
#  a          b        
#  <list>     <list>   
#1 <list [2]> <dbl [2]>
#2 <list [2]> <dbl [2]>

还有map_depth。根据?map_depth

map_depth() 允许将 .f 应用于嵌套向量的特定深度级别

modify_depth相同

df %>% 
  mutate(
      b = a %>% 
              map_depth(2, sum) %>% 
              map(unlist) )

【讨论】:

  • 谢谢@akrun,你有没有提供教程?看来你知道很多这些东西,我想了解更多。
猜你喜欢
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多