R кумулятивный bind.rows - PullRequest
       8

R кумулятивный bind.rows

0 голосов
/ 03 ноября 2018

Я хотел бы найти в совокупности bind.rows. Вот небольшой пример того, чего я хотел бы достичь. Я продемонстрирую набор данных gapminder из пакета dslabs.

library(tidyverse)
library(dslabs)

gapminder %>%
  group_by(year) %>% 
  nest() %>% 
  head(5)

A tibble: 5 x 2
   year data              
  <int> <list>            
1  1960 <tibble [185 x 8]>
2  1961 <tibble [185 x 8]>
3  1962 <tibble [185 x 8]>
4  1963 <tibble [185 x 8]>
5  1964 <tibble [185 x 8]>

Я хотел бы создать столбец, который связывал бы более ранние наблюдения из столбца данных вместе. Так, например, строка 1 будет иметь только данные за 1960 год, строка 2 будет иметь данные за 1960 + 1961, строка 3 за данные 1960 + 1961 + 1963 ... Конечный результат должен выглядеть примерно так.

# A tibble: 5 x 3
   year data               cumulative_data   
  <int> <list>             <list>            
1  1960 <tibble [185 x 8]> <tibble [185 x 8]>
2  1961 <tibble [185 x 8]> <tibble [370 x 8]>
3  1962 <tibble [185 x 8]> <tibble [555 x 8]>
4  1963 <tibble [185 x 8]> <tibble [740 x 8]>
5  1964 <tibble [185 x 8]> <tibble [925 x 8]>

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

В tidyverse мы также можем использовать accumulate из purrr

library(tidyverse)
library(dslabs)
gapminder %>%
   group_by(year) %>% 
   nest() %>% 
   head(5) %>%
   mutate(cumulative_data = accumulate(data, bind_rows)) 
# A tibble: 5 x 3
#   year data               cumulative_data   
#  <int> <list>             <list>            
#1  1960 <tibble [185 × 8]> <tibble [185 × 8]>
#2  1961 <tibble [185 × 8]> <tibble [370 × 8]>
#3  1962 <tibble [185 × 8]> <tibble [555 × 8]>
#4  1963 <tibble [185 × 8]> <tibble [740 × 8]>
#5  1964 <tibble [185 × 8]> <tibble [925 × 8]>
0 голосов
/ 03 ноября 2018

Reduce с опцией accumulate = TRUE позволяет добиться:

gapminder %>%
  group_by(year) %>% 
  nest() %>% 
  head(5) %>%
  mutate(cumulative_data = Reduce(rbind, data, accumulate = TRUE))
# A tibble: 5 x 3
#    year data               cumulative_data   
#   <int> <list>             <list>            
# 1  1960 <tibble [185 × 8]> <tibble [185 × 8]>
# 2  1961 <tibble [185 × 8]> <tibble [370 × 8]>
# 3  1962 <tibble [185 × 8]> <tibble [555 × 8]>
# 4  1963 <tibble [185 × 8]> <tibble [740 × 8]>
# 5  1964 <tibble [185 × 8]> <tibble [925 × 8]>
...