生成虚拟面板数据集

时间:2019-11-16 11:16:54

标签: r data.table

我想创建一个虚拟的面板数据集,其中包含100个面板观测值(50对),并具有以下变量:panelID,国家和年份。这意味着每个panelID应该具有相同的国家/地区,但应具有不同的年份(什么年都无所谓,但假设相隔4年)。

我已经尝试执行以下操作,但是它不起作用。

panelID = c(1:50)   
year= c(2001:2010)
country = c("NLD", "GRC", "GBR")
DT <- data.table(expand.grid(panelID, year, country))

我应该怎么做?

所需的输出,例如:

DT1 <- fread(
"panelID coutry year   
  1   NLD   2002
  1   NLD   2006      
  2   GBR   2001
  2   GBR   2005    
  3   GRC   2001             
  3   GRC   2005
  4   NLD   2004
  4   NLD   2008
  5   GBR   2006
  5   GBR   2010    
  6   GRC   2005             
  6   GRC   2009",
header = TRUE)

1 个答案:

答案 0 :(得分:1)

我认为这是预期结果:

panelID = c(1:50)   
year= c(2001:2010)
country = c("NLD", "GRC", "GBR")

n <- 2

library(data.table)
set.seed(123)
data.table(panelID = rep(sample(panelID), each = n),
           country = rep(sample(country, length(panelID), replace = T), each = n),
           year = c(replicate(length(panelID), sample(year, n))))

     panelID country year
  1:      31     GBR 2010
  2:      31     GBR 2005
  3:      15     NLD 2005
  4:      15     NLD 2008
  5:      14     GRC 2003
  6:      14     GRC 2002
  7:       3     NLD 2010
  8:       3     NLD 2002
  9:      42     NLD 2010
 10:      42     NLD 2006
... 100 rows total

相隔4年:

#for 4 years apart
set.seed(123)
years <- sample(2001:2006, length(panelID), replace = T)

set.seed(123)
data.table(panelID = rep(sample(panelID), each = n),
           country = rep(sample(country, length(panelID), replace = T), each = n),
           year = c(t(matrix(c(years, years+4), ncol = n))))