2017-01-12 30 views
0

我遇到了嵌套和映射問題,我不知道如何解決。我有嵌套dataframes一個tibble,如下:將函數應用於嵌套數據框與地圖

> 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列的總和在每個嵌套dataframes的。我不知道現在要做這種權利的最好方法,這就是我一直在努力:

> 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的鏈接wetransfer(如果這是允許的):https://wetransfer.com/downloads/9697fff593f51c02136bc704adccbcc220170112161115/5be1fc

回答

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"]]))) 
+0

我更喜歡第一種選擇,因爲對我來說personall讀取更清晰一點年。我沒有長時間處理嵌套數據或映射。 'map_dbl'非常瞭解 - 我沒有意識到我可以在'map'上加上後綴 – Visser