扩展面板数据并将列表作为运行年份

时间:2017-05-16 20:06:29

标签: r dplyr reshape

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

 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)

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

 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

1 个答案:

答案 0 :(得分:0)

您可以创建一个列表列并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