每个国家不同时期的子面板数据集

Subset panel dataset for different periods for each country

我有一个面板数据集,其中包含 1789-2020 年期间 120 个国家/地区的 15 个变量的值。分析单位是国家年。这是数据集的简化版本,只是为了展示它的样子。

set.seed(42)
n <- 20
Data <- data.frame(Country=rep(LETTERS[1:5], n/5),date=sample(1789:2020, n, replace=TRUE), variable1=sample(18:30, n, replace=TRUE), variable2=sample(10:100, n, replace=TRUE),variable3=rnorm(n))
Data

我想对数据进行子集化,这样我得到一个子集数据,其中我只拥有每个国家/地区在他们各自过渡到民主的那一年之后的所有数据 - 例如A国(1965-2020年)、B国(1988-2020年)、C国(1998-2020年)等等,所有的国家,每个国家的周期范围应该设置不同。

除了像下面的代码那样手动对数据进行子集化之外,还有其他方法可以做到这一点吗?这是我目前所做的?如果国家数量很少,我只会 运行 下面的这些代码,但它不在我正在处理的实际数据集中,所以如果有其他方法,那就太好了。谢谢!

Data2 <- subset(Data, {country_name == "A" & year >= "2000"} |                          {country_name == "B" & year >= "1991"} | 
{country_name == "C" & year >= "1997"} | 
{country_name == "D" & year >= "1994"} | 
{country_name == "E" & year >= "1997"})

我们可以对 key/val 数据集进行非等值连接

library(data.table)
keydat <- data.frame(Country = c("A", "C", 'D', "E"),
      date = c(2000, 1997, 1994, 1997))
setDT(Data)[keydat, on = .(Country, date >= date)]

创建一个查找数据框,其中包含国家名称和他们过渡到民主的年份。加入两个数据框并仅保留 date 值大于 year.

的行
lookup <- data.frame(Country = c('A', 'B', 'C', 'D', 'E'), 
                     year = c(2000, 1995, 1997, 1994, 1997))

result <- merge(Data, lookup, by = 'Country') |> subset(date > year)

或使用dplyr -

library(dplyr)  
result  <- inner_join(Data, lookup, by = 'Country') %>% filter(date > year)