我有两个数据集,它们的街道地址和公寓号字符串重叠但不相同,我想在两个数据集中创建相同的唯一标识符,然后将其与该标识符合并。
我的第一个直觉是对两个数据集都执行此操作,然后合并:
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
答案 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")