Dplyr:在面板数据集上寻找与NAs的连接

时间:2016-05-18 14:18:39

标签: sql r join dplyr

我有两个表如下所示:

Table "data"                                 Table "countries"
------------------------------               -----------------
ID Time Country Variable Value               ID Country
1  2013 Austria V1       150                 1  Austria
1  2014 Austria V1       170                 2  Germany
1  2015 Austria V1       200                 3  Spain
2  2013 Germany V1       280
2  2015 Germany V1       350

"数据" table是一个面板数据集,它包含多个时间段和多个变量中的多个国家/地区(即使我在示例中只包含一个变量)。 "国家"表格是所有国家的完整表格 - 这里有三个。

我需要做的是一个连接,它填补了"数据中的缺失观察结果。表与每年的价值的NA!加入"数据"表应如下所示:

Table "data"                                 
------------------------------               
ID Time Country Variable Value               
1  2013 Austria V1       150                 
1  2014 Austria V1       170                 
1  2015 Austria V1       200                 
2  2013 Germany V1       280
2  2014 Germany V1       NA
2  2015 Germany V1       350
3  2013 Spain   V1       NA
3  2014 Spain   V1       NA
3  2015 Spain   V1       NA

我认为正确的联接是正确的方向,它也有效,但它只包括一次NA。在上面的例子中,西班牙只会被包含在"数据"表。我做了一个简单的连接:

joined <- right_join(data, countries, by = c("ID"))

是否有类似&#34;重复加入&#34;对于面板数据集还是我需要将数据集拆分为时间段,单独加入它们并在之后追加它们?

谢谢!

1 个答案:

答案 0 :(得分:6)

您可以使用包complete中的tidyr

library(tidyr)
right_join(data, countries) %>%
  complete(Time, Variable, nesting(Country, ID)) 

   Time Variable Country    ID Value
  (int)    (chr)   (chr) (int) (int)
1  2013       V1 Austria     1   150
2  2013       V1 Germany     2   280
3  2013       V1   Spain     3    NA
4  2014       V1 Austria     1   170
5  2014       V1 Germany     2    NA
6  2014       V1   Spain     3    NA
7  2015       V1 Austria     1   200
8  2015       V1 Germany     2   350
9  2015       V1   Spain     3    NA