2017-01-12 5 views
0

Ich habe ein Problem mit der Verschachtelung und Zuordnung, dass ich nicht sicher bin, wie ich mich zurechtfinden soll. Ich habe eine tibble mit verschachtelten Datenrahmen, wie folgt:Anwenden von Funktionen auf verschachtelte Datenrahmen mit Karte

> 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 
> 

Ich brauche die Summe der def.increase Spalte in jeder der verschachtelten Datenrahmen zu finden. Ich bin mir nicht sicher, ob die besten Methode, dieses Recht jetzt zu tun, das ist, was ich habe versucht:

> 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 

Offensichtlich ist die Frage dabei ist, dass ich mit der Summe aus jeder Spalte enden. Das wäre in Ordnung, aber es wird danach ziemlich unordentlich, nur die Zeilen auszuwählen, die ich möchte. Gibt es eine bessere Möglichkeit, die Spaltensumme für jede meiner def.increase Spalten zu finden? Vielen Dank für Ihre Hilfe :)

Edit: Nicht sicher, ob ich kopieren/einfügen ein Objekt wie mein x so ist hier ein Link zu den rds auf WeTransfer (wenn das erlaubt ist): https://wetransfer.com/downloads/9697fff593f51c02136bc704adccbcc220170112161115/5be1fc

Antwort

3

Sie müssen nur wählen sie die def.increase Säule zuerst:

library(tidyverse) 

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

Oder nur mit einer Karte:

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

ziehe ich die erste Option, da es ein wenig klarer für mich liest personall y. Ich habe nicht lange mit verschachtelten Daten oder Mappings gearbeitet. Das 'map_dbl' ist ausgezeichnet zu wissen - ich wusste nicht, dass ich Suffixe auch auf' map' setzen könnte – Visser

Verwandte Themen