сравнить строки символов извлечь различия в новый столбец R - PullRequest
0 голосов
/ 16 октября 2018

Название может показаться странным, идея более проста.

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

Ниже приведены данные, которые создают DF.Затем я использую charmatch, обернутый внутри mapply, чтобы сравнить addr2 с addr1 в обоих направлениях;если есть какие-либо различия, столбцы addr_compX_Y = 1.

eg_data <- data.frame(
addr1 = c('123 Main St','742 Evergreen Ter','8435 Roanoke Dr','1340 N State Pkwy') , 
addr2 = c('123 Main St Apt 4','742 Evergreen Terrace','8435 Roanoke Dr Unit 5','1340 N State Pkwy')) 
eg_data$addr_comp1_2 <- mapply(charmatch, eg_data$addr1, eg_data$addr2)
eg_data$addr_comp2_1 <- mapply(charmatch, eg_data$addr2, eg_data$addr1)

Идеальный кадр данных конечного результата будет выглядеть как второй набор примеров данных.Я бы добавил что-то, что извлекает что-то другое, если addr_compX_Y не равно 1.

eg_data <- data.frame(
addr1 = c('123 Main St','742 Evergreen Ter','8435 Roanoke Dr','1340 N State Pkwy') , 
addr2 = c('123 Main St Apt 4','742 Evergreen Terrace','8435 Roanoke Dr Unit 5','1340 N State Pkwy')) 
eg_data$addr_comp1_2 <- mapply(charmatch, eg_data$addr1, eg_data$addr2)
eg_data$addr_comp2_1 <- mapply(charmatch, eg_data$addr2, eg_data$addr1)
eg_data$diff1_2 = c(NA, NA, NA, NA)
eg_data$diff2_1 = c(' Apt 4', 'race', ' Unit 5', NA)

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

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 16 октября 2018

Вот как я бы это сделал, используя библиотеку vecsets:

library(vecsets)
eg_data <- data.frame(
  addr1 = c('123 Main St','742 Evergreen Ter','8435 Roanoke Dr','1340 N State Pkwy') , 
  addr2 = c('123 Main St Apt 4','742 Evergreen Terrace','8435 Roanoke Dr Unit 5','1340 N State Pkwy'),
  stringsAsFactors=FALSE) 
eg_data$addr_diff1_2 <- mapply(vsetdiff, strsplit(eg_data$addr1, split = ""),
                              strsplit(eg_data$addr2, split = ""))
eg_data$addr_diff2_1 <- mapply(vsetdiff, strsplit(eg_data$addr2, split = ""),
                               strsplit(eg_data$addr1, split = ""))

выводит список символов:

              addr1                  addr2 addr_diff1_2        addr_diff2_1
1       123 Main St      123 Main St Apt 4                  , A, p, t,  , 4
2 742 Evergreen Ter  742 Evergreen Terrace                       r, a, c, e
3   8435 Roanoke Dr 8435 Roanoke Dr Unit 5               , U, n, i, t,  , 5
4 1340 N State Pkwy      1340 N State Pkwy                                 
...