展开面板数据并获得 运行 年作为列
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
我有一个数据框,我想像面板数据一样展开它。
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