在 R 中将数据从 from-to 格式重塑为 country-year

Reshaping data from an from-to format into country-year in R

我有一个包含以下格式的政治领导人信息的数据集:

leader    country    begin    end
clinton   USA        1994     2001
bush      USA        2002     2009
...       ...        ...      ...

但是,为了与其他数据合并,我想将其重塑为常用的国家/地区年格式,如下所示:

country    year    leader
USA        1994    clinton
USA        1995    clinton

我目前的方法(创建一个空数据框并使用嵌套 for 循环)需要很长时间,而且看起来很愚蠢。由于数据集相当大,我正在寻找一种更智能、更有效的方法来做到这一点。

PS: 不要担心奇怪的年份,领导者被分配到他们已经开始担任领导者的年份。这就是为什么布什只在 2002 年而不是 2001 年开始

你的意思是这样的吗?

df <- structure(list(leader = structure(2:1, .Label = c("bush", "clinton"
), class = "factor"), country = structure(c(1L, 1L), .Label = "USA", class = "factor"), 
    begin = c(1994L, 2002L), end = c(2001L, 2009L)), class = "data.frame", row.names = c(NA, 
-2L))

df %>% 
group_by(leader,country) %>% 
expand(year=begin:end) %>%
arrange(year)

你得到每个国家+领导人,从开始到结束之间的所有年份

# A tibble: 16 x 3
# Groups:   leader, country [2]
   leader  country  year
   <fct>   <fct>   <int>
 1 clinton USA      1994
 2 clinton USA      1995
 3 clinton USA      1996
 4 clinton USA      1997
 5 clinton USA      1998
 6 clinton USA      1999
 7 clinton USA      2000
 8 clinton USA      2001
 9 bush    USA      2002
10 bush    USA      2003
11 bush    USA      2004
12 bush    USA      2005
13 bush    USA      2006
14 bush    USA      2007
15 bush    USA      2008
16 bush    USA      2009