使用地图将函数应用于嵌套数据框

Applying functions to nested dataframes with map

我在嵌套和映射方面遇到问题,我不确定如何解决。我有嵌套数据框的问题,如下所示:

> x
# A tibble: 18 × 3
   event.no               data dr.dur
      <dbl>             <list>  <int>
1         1   <tibble [7 × 4]>      7
2         4 <tibble [123 × 4]>    123
3         5   <tibble [9 × 4]>      9
4         7  <tibble [14 × 4]>     14
5        10  <tibble [19 × 4]>     19
6        11 <tibble [220 × 4]>    220
7        12 <tibble [253 × 4]>    253
8        14 <tibble [153 × 4]>    153
9        15  <tibble [28 × 4]>     28
10       17 <tibble [169 × 4]>    169
11       18   <tibble [7 × 4]>      7
12       19 <tibble [115 × 4]>    115
13       21 <tibble [109 × 4]>    109
14       25  <tibble [13 × 4]>     13
15       26 <tibble [249 × 4]>    249
16       28   <tibble [7 × 4]>      7
17       30  <tibble [26 × 4]>     26
18       31  <tibble [12 × 4]>     12
>
> x$data[[1]]
# A tibble: 7 × 4
  discharge threshold def.increase event.orig
      <dbl>     <dbl>        <dbl>      <dbl>
1     0.348     0.373       2160.0          1
2     0.348     0.373       2160.0          1
3     0.379     0.373       -518.4          0
4     0.379     0.373       -518.4          0
5     0.379     0.373       -518.4          0
6     0.379     0.373       -518.4          0
7     0.348     0.373       2160.0          2
> 

我需要在每个嵌套数据框中找到 def.increase 列的总和。我不确定现在最好的方法,这是我一直在尝试的方法:

> x %>%
+   mutate(dr.def = map(data, colSums)) %>%
+   unnest(dr.def)
# A tibble: 72 × 3
   event.no dr.dur    dr.def
      <dbl>  <int>     <dbl>
1         1      7     2.560
2         1      7     2.611
3         1      7  4406.400
4         1      7     4.000
5         4    123    45.739
6         4    123    45.879
7         4    123 12096.000
8         4    123   530.000
9         5      9     3.269
10        5      9     3.357
# ... with 62 more rows

显然,问题在于我最终得到了每一列的总和。这没关系,但之后 select 只有我想要的行变得非常混乱。有没有更好的方法来查找每个 def.increase 列的列总和?感谢您的帮助:)

编辑:不确定我是否可以 copy/paste 像我的 x 这样的对象所以这里是一个 link 到 wetransfer 上的 rds(如果允许的话):https://wetransfer.com/downloads/9697fff593f51c02136bc704adccbcc220170112161115/5be1fc

您只需要先 select def.increase 列:

library(tidyverse)

x %>% 
  mutate(dr.def = map(data, "def.increase") %>% map_dbl(sum))

或者只用一张地图:

x %>% 
  mutate(dr.def = map_dbl(data, ~ sum(.x[["def.increase"]])))