我遇到嵌套和映射问题,我不知道如何解决。我有一个嵌套数据帧的元素,如下所示:
> 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
显然,这个问题是我最终得到了每一列的总和。这样可以,但之后只选择我想要的行会变得非常混乱。有没有更好的方法来查找每个def.increase
列的列总和?谢谢你的帮助:)
编辑:不确定我是否可以复制/粘贴像x
这样的对象,所以这里有一个指向湿转移的rds的链接(如果允许的话):https://wetransfer.com/downloads/9697fff593f51c02136bc704adccbcc220170112161115/5be1fc
答案 0 :(得分:3)
您只需先选择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"]])))