r - кодировать две переменные, чтобы создать уникальный идентификатор для двух наборов данных - PullRequest
0 голосов
/ 03 октября 2018

У меня есть два набора данных с перекрывающимися, но не идентичными столбцами строк для адреса улицы и номера квартиры, я хотел бы создать один и тот же уникальный идентификатор в двух наборах данных, а затем объединить их с этим идентификатором.

Мой первый инстинкт - сделать это для обоих наборов данных, а затем объединить:

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

Но поскольку два набора данных имеют неэквивалентные размеры, я не знаю, что делать.Я бы предположил, что мне нужно кодировать буквы в адресе улицы и кодировать номер квартиры, чтобы создать идентификатор, но я не знаю, как это сделать в R. Для простоты я предполагаю, что все мои адреса являются числами

Набор данных 1

address unit 
1111        
1111    
2111    F
1114    2G
1311    

Набор данных 2

address unit
1311   
2111    F
1111    6
1114    2G 

Я хотел бы создать уникальный идентификатор, определяемый не последовательностью адресов, а их содержимым.

Набор данных 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 голосов
/ 03 октября 2018

Мы создаем общие значения для обоих наборов данных, получая уникальные значения из столбца «address» в обоих наборах данных, используем его как levels для преобразования «address» в 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")
...