在R中制作可比标识符

时间:2015-06-10 21:24:48

标签: r

我正在使用R 3.1.3并且我有这样的数据;

id_1 <- c('a','a','b','c','d','e')
id_2 <- c('a','f','f','g','g','e')

我希望制作数据;

id_common <- c('1','1','1','2','2','3')

情况是我们在第1期和第2期拥有不同行政边界(id_1id_2)的数据,因为在这些期间有拆分或合并,我们希望生成一个新的边界标识符使用新标识符(id_common)使它们与聚合相当。例如,在这种情况下,a的一部分与b合并,并在这些期间之间变为f,因此我想要处理ab期间1以及期间2中的af作为一个名为1的组并汇总两个期间&#39;在这个级别的数据进行比较。

当然,id_common应该是涵盖这两个时期的最精确的ID(不应该是id_common <- c('1','1','1','1','1','3'))。有没有什么好主意可以轻松做到这一点?

事实上,我的数据中有两个以上的句号,但我认为我可以轻松地将建议的策略修改为两个以上的句号。

提前谢谢你,

跟进;

我想我可以通过以下代码执行此操作,但这可能有点混乱。 (我为标签做了基于字符串的id_common。)

id_common <- id_1
elements <- unique(id_common)
for (element in elements){
   map1 <- vector()
   map1 <- id_2[id_1==element]
   map2 <- id_1[which(id_2  %in% map1)]
   if (setequal(map2,element) == F){
      while (setequal(map2,element) == T){
         map1 <- vector()
         map1 <- id_2[which(id_1  %in% map2)]
         map2 <- id_1[which(id_2  %in% map1)]
         }
      }
   id_common[which(id_1  %in% map2)]<- paste(unique(map2),collapse="+")
}

1 个答案:

答案 0 :(得分:0)

您似乎在说区域abf对应于区域1cdg对应2e对应3

执行此操作的一种简单方法是创建一个列表,然后堆叠列表,然后将数据框与两个ID合并:

id_key = list(`1`=c('a','b','f'), `2`=c('c','d','g'), `3`=c('e'))
stack_id <- stack(id_key)

然后您可以合并此数据框作为密钥。