我正在使用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_1
和id_2
)的数据,因为在这些期间有拆分或合并,我们希望生成一个新的边界标识符使用新标识符(id_common
)使它们与聚合相当。例如,在这种情况下,a
的一部分与b
合并,并在这些期间之间变为f
,因此我想要处理a
和b
期间1以及期间2中的a
和f
作为一个名为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="+")
}
答案 0 :(得分:0)
您似乎在说区域a
,b
和f
对应于区域1
。 c
,d
和g
对应2
,e
对应3
。
执行此操作的一种简单方法是创建一个列表,然后堆叠列表,然后将数据框与两个ID合并:
id_key = list(`1`=c('a','b','f'), `2`=c('c','d','g'), `3`=c('e'))
stack_id <- stack(id_key)
然后您可以合并此数据框作为密钥。