'How to nest a tibble with two lists
I have some animal movement data which currently in a tibble with two lists, nested by ID number:
> trks.all
# A tibble: 24 x 3
id data steps
<int> <list> <list>
1 38 <track_xyt [506 x 9]> <steps_xyt [333 x 11]>
2 7 <track_xyt [1,677 x 9]> <steps_xyt [1,106 x 11]>
3 16 <track_xyt [1,116 x 9]> <steps_xyt [741 x 11]>
4 21 <track_xyt [240 x 9]> <steps_xyt [149 x 11]>
5 33 <track_xyt [262 x 9]> <steps_xyt [151 x 11]>
6 11 <track_xyt [586 x 9]> <steps_xyt [377 x 11]>
7 4 <track_xyt [156 x 9]> <steps_xyt [104 x 11]>
8 25 <track_xyt [71 x 9]> <steps_xyt [42 x 11]>
9 14 <track_xyt [710 x 9]> <steps_xyt [458 x 11]>
10 26 <track_xyt [226 x 9]> <steps_xyt [136 x 11]>
11 23 <track_xyt [562 x 9]> <steps_xyt [371 x 11]>
12 31 <track_xyt [441 x 9]> <steps_xyt [285 x 11]>
13 22 <track_xyt [651 x 9]> <steps_xyt [408 x 11]>
14 34 <track_xyt [812 x 9]> <steps_xyt [530 x 11]>
15 24 <track_xyt [500 x 9]> <steps_xyt [332 x 11]>
16 29 <track_xyt [1,089 x 9]> <steps_xyt [723 x 11]>
17 19 <track_xyt [530 x 9]> <steps_xyt [342 x 11]>
18 13 <track_xyt [487 x 9]> <steps_xyt [320 x 11]>
19 39 <track_xyt [493 x 9]> <steps_xyt [323 x 11]>
20 6 <track_xyt [672 x 9]> <steps_xyt [443 x 11]>
21 15 <track_xyt [756 x 9]> <steps_xyt [480 x 11]>
22 27 <track_xyt [139 x 9]> <steps_xyt [82 x 11]>
23 1 <track_xyt [41 x 9]> <steps_xyt [25 x 11]>
24 37 <track_xyt [772 x 9]> <steps_xyt [497 x 11]>
I unnested by the last list, steps:
trks.all.trim <- trks.all %>% select(id,data,steps) %>% unnest(cols=steps)
I then removed some outlier step lengths:
max(trks.all.trim$sl_)
which(trks.all.trim$sl_==max(trks.all.trim$sl_))
trks.all.trim <- trks.all.trim %>% filter(!row_number() %in% c(5044,5045))
max(trks.all.trim$sl_)
which(trks.all.trim$sl_==max(trks.all.trim$sl_))
trks.all.trim <- trks.all.trim %>%filter(!row_number() %in% c(5175))
I now wish to re-nest this tibble, but I'm not sure how. I tried the below line, but it reassigns my data list, which previously contained tracks_xyt, with the steps data. I wish to return to the original format and not overwrite any data.
trks.all.trim <- trks.all.trim %>% amt::nest(data = -"id", steps = -"id")
> trks.all.trim
# A tibble: 24 x 3
id data steps
<int> <list> <list>
1 38 <steps_xyt [333 x 12]> <steps_xyt [333 x 12]>
2 7 <steps_xyt [1,106 x 12]> <steps_xyt [1,106 x 12]>
3 16 <steps_xyt [741 x 12]> <steps_xyt [741 x 12]>
4 21 <steps_xyt [149 x 12]> <steps_xyt [149 x 12]>
5 33 <steps_xyt [151 x 12]> <steps_xyt [151 x 12]>
6 11 <steps_xyt [377 x 12]> <steps_xyt [377 x 12]>
7 4 <steps_xyt [104 x 12]> <steps_xyt [104 x 12]>
8 25 <steps_xyt [42 x 12]> <steps_xyt [42 x 12]>
9 14 <steps_xyt [458 x 12]> <steps_xyt [458 x 12]>
10 26 <steps_xyt [136 x 12]> <steps_xyt [136 x 12]>
11 23 <steps_xyt [371 x 12]> <steps_xyt [371 x 12]>
12 31 <steps_xyt [285 x 12]> <steps_xyt [285 x 12]>
13 22 <steps_xyt [408 x 12]> <steps_xyt [408 x 12]>
14 34 <steps_xyt [526 x 12]> <steps_xyt [526 x 12]>
15 24 <steps_xyt [332 x 12]> <steps_xyt [332 x 12]>
16 29 <steps_xyt [723 x 12]> <steps_xyt [723 x 12]>
17 19 <steps_xyt [342 x 12]> <steps_xyt [342 x 12]>
18 13 <steps_xyt [320 x 12]> <steps_xyt [320 x 12]>
19 39 <steps_xyt [323 x 12]> <steps_xyt [323 x 12]>
20 6 <steps_xyt [443 x 12]> <steps_xyt [443 x 12]>
21 15 <steps_xyt [480 x 12]> <steps_xyt [480 x 12]>
22 27 <steps_xyt [82 x 12]> <steps_xyt [82 x 12]>
23 1 <steps_xyt [25 x 12]> <steps_xyt [25 x 12]>
24 37 <steps_xyt [497 x 12]> <steps_xyt [497 x 12]>
Apologies if this is a simple fix, I am still new to tidyr and haven't been able to find the solution online.
Solution 1:[1]
Try group_by() before you call nest(). Also, I'm not sure what the {amt} package is, but you'll want nest() from {tidyr}
res <- trks.all.trim %>%
group_by(id, data) %>%
tidyr::nest()
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Ekholme |
