【问题标题】:compare character strings extract differences into new column R比较字符串将差异提取到新列 R
【发布时间】:2018-10-16 20:16:30
【问题描述】:

标题可能听起来令人困惑,想法更直接。

我正在尝试比较地址数据。我有同一个人的多个地址,我需要比较它们。如果他们是平等的,那就太好了。如果不是,我需要将任何不同的内容提取到新列中。

下面有创建 DF 的数据。然后,我使用包裹在 mapply 中的charmatch 在两个方向上比较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)

我知道如何比较,我知道如何提取,但我不确定如何同时进行这两者。

感谢任何帮助。

【问题讨论】:

    标签: r string character string-matching


    【解决方案1】:

    我会这样做,使用一个名为 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                                 
    

    【讨论】:

    • 这太棒了,它能让我走完 90% 的路。唯一的问题 - 有什么东西可以一起输出不同的字符,IE 不是用逗号分隔的吗? “Apt 4”而不是“, A, p, t, , 4”?我可以用粘贴将它们重新组合在一起,但如果有任何包可以自动完成,rad。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 2022-06-22
    • 2021-02-04
    • 1970-01-01
    相关资源
    最近更新 更多