首页 > 解决方案 > 在 R 中将数据从 from-to 格式重塑为 country-year

问题描述

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

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

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

country    year    leader
USA        1994    clinton
USA        1995    clinton

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

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

标签: rformattingtime-seriesreshape

解决方案


你的意思是这样的吗?

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

推荐阅读