展开面板数据并获得 运行 年作为列

expand panel data and get a running year as a column

我有一个数据框,我想像面板数据一样展开它。

 profile<- c('lehman', 'john','oliver','stephen','picasso')
 from<-   c(2008, 2008,2009,2008,2009)
 to <-   c (2009, 2009, 2009, 2009,2009)
 df<- data.frame(profile, from, to)

我想创建一个名为年份(运行 年)的附加行,如下所示。我的意思是数据被扩展为年份和结束年份之间的差异(2009 年是默认的结束年份)。所以我想在 2008 年有两行,2009 年有 1 行。有什么建议吗?

 profile from   to   year
 lehman  2008 2009   2008
 lehman  2009 2009   2009
 john    2008 2009   2008
 john    2008 2009   2009
 oliver  2009 2009   2009
 stephen 2008 2009   2008
 stephen 2008 2009   2009
 picasso 2009 2009   2009

您可以创建一个列表列并 unnest 展开,根据需要复制其他变量:

library(tidyverse)

df %>% rowwise() %>%    # calculate seq separately for each row
    mutate(year = list(seq(from, to))) %>% 
    ungroup() %>% 
    unnest()
#> # A tibble: 8 x 4
#>   profile  from    to  year
#>    <fctr> <dbl> <dbl> <int>
#> 1  lehman  2008  2009  2008
#> 2  lehman  2008  2009  2009
#> 3    john  2008  2009  2008
#> 4    john  2008  2009  2009
#> 5  oliver  2009  2009  2009
#> 6 stephen  2008  2009  2008
#> 7 stephen  2008  2009  2009
#> 8 picasso  2009  2009  2009