r-编码两个变量以在两个数据集中创建唯一的ID

时间:2018-10-03 16:05:30

标签: r uniqueidentifier unique-id

我有两个数据集,它们的街道地址和公寓号字符串重叠但不相同,我想在两个数据集中创建相同的唯一标识符,然后将其与该标识符合并。

我的第一个直觉是对两个数据集都执行此操作,然后合并:

df <- unidue(data_set1)
df$unit_id <- 1:nrow(df)
df_final <- merge(data_set1,df)

但是由于两个数据集的大小不相等,所以我不知所措。我想我必须对街道地址中的字母进行编码并对公寓号码进行编码才能创建ID,但是我不知道如何在R中这样做。为简单起见,我假设我所有的地址都是数字

数据集1

address unit 
1111        
1111    
2111    F
1114    2G
1311    

数据集2

address unit
1311   
2111    F
1111    6
1114    2G 

我想创建一个唯一的ID,该ID不是由地址的顺序决定的,而是由它们的内容决定的。

数据集1

address unit id
1111         3333
1111         3333
2111    F    3334
1114    2G   3335
1311         3336

数据集2

address unit id
1311         3336
2111    F    3334
1111    6    3337
1114    2G   3335

然后合并:

address unit id
1111         3333
1111         3333
1111    6    3337
2111    F    3334
1114    2G   3335
1311         3336

1 个答案:

答案 0 :(得分:1)

我们通过从两个数据集中的“地址”列中获取唯一值来在两个数据集中创建公用值,将其用作levels,以将“地址”转换为factor,然后将其强制转换为integer

lvls <- unique(c(df1$address, df2$address))
df1$id <- as.integer(factor(df1$address, levels = lvls)) + 3332
df2$id <- as.integer(factor(df2$address, levels = lvls)) + 3332

之后,merge在“ id”列中的两个数据集

merge(df1, df2, all = TRUE, by = "id")