标题可能听起来令人困惑,想法更简单。
我正在尝试比较地址数据。同一个人有多个地址,需要进行比较。如果它们相等,那就太好了。如果不是,那么我需要将不同之处提取到新列中。
下面有创建DF的数据。然后,我使用包裹在mapply中的charmatch在两个方向上将addr2与addr1进行比较;如果有任何差异,则addr_compX_Y列=1。
<link href="https://use.fontawesome.com/releases/v5.4.1/css/all.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>
<div id="app">
<button @click="addFa($event)" v-for="word in words">{{word}}</button>
<button @click="changeData()">Change data</button>
</div>
理想的最终结果数据帧看起来像第二组示例数据。如果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)
我知道如何比较,我知道如何提取,但是我不确定如何同时执行它们。
感谢您的帮助。
答案 0 :(得分: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