面板数据中的ID匹配

时间:2018-04-25 21:06:57

标签: r stata

我的数据按以下方式组织:

ID  Year  ID2012   var1   var2
1   2012     .
A   2014     1
A   2016     .
2   2012     .
B   2014     2
B   2016     .

2014年,我知道ID2012和ID2014之间的对应关系,我知道ID2016的编码方式与ID2014相同。现在我想让ID多年来一致得到一个小组:A被替换为1或者反过来。

ID  Year  ID2012   var1   var2
A   2012     .
A   2014     1
A   2016     .
B   2012     .
B   2014     2
B   2016     .

ID  Year  ID2012   var1   var2
1   2012     .
1   2014     1
1   2016     .
2   2012     .
2   2014     2
2   2016     .

ID2012和ID2014之间没有可以使用的算术规则。

1 个答案:

答案 0 :(得分:3)

以下是一种方法:

# Read in the data
df <- read.table(text = "ID  Year  ID2012 var1
                         1   2012     .    9.1
                         A   2014     1    2.2
                         A   2016     .    1.0
                         2   2012     .    4.8
                         B   2014     2    4.7
                         B   2016     .    6.1", 
                 header = T, stringsAsFactors = F)

# Find the positions where ID2012 tells us what ID to replace it with
ID.map <- match(df$ID, df$ID2012) # [1]  2 NA NA  5 NA NA

# Replace values in the ID column where they are defined in the map
df$ID[!is.na(ID.map)] <- df[ID.map[!is.na(ID.map)], 'ID']

# Result:
#   ID Year ID2012 var1
# 1  A 2012      .  9.1
# 2  A 2014      1  2.2
# 3  A 2016      .  1.0
# 4  B 2012      .  4.8
# 5  B 2014      2  4.7
# 6  B 2016      .  6.1