我有一个数据框,我想像面板数据一样扩展。
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
答案 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