使用地图将函数应用于嵌套数据框
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"]])))
我在嵌套和映射方面遇到问题,我不确定如何解决。我有嵌套数据框的问题,如下所示:
> 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"]])))