【发布时间】:2016-11-22 06:49:42
【问题描述】:
我被难住了。如何根据行是否匹配将数据复制到 ID 变量中的另一行。我正在处理数千个历史地址,但并非所有地址都完全匹配。但是任何差异通常都在地址的末尾,因此使用该值的前 4 或 5 个字符应该可以处理它。我想用适当的区域代码填写 NA。我一直在尝试 dplyr 解决方案,却一无所获。任何想法将不胜感激。
ID<-c(50,50,50,71,71,71)
ID_Y<-c(505,506,507,715,716,717)
address<-c("325 Park St N","325 Park St","325 Park","616 Holly","616 Holly Dr","510 Walnut Dr")
tract<-c(110,NA,NA,223,NA,989)
AD567<-data.frame(ID,ID_Y,address,tract)
AD567
ID ID_Y address tract
1 50 505 325 Park St N 110
2 50 506 325 Park St NA
3 50 507 325 Park NA
4 71 715 616 Holly 223
5 71 716 616 Holly Dr NA
6 71 717 510 Walnut Dr 989
试图到达这里:
ID ID_Y address tract
1 50 505 325 Park St N 110
2 50 506 325 Park St 110
3 50 507 325 Park 110
4 71 715 616 Holly 223
5 71 716 616 Holly Dr 223
6 71 717 510 Walnut Dr 989
【问题讨论】:
-
试试
na.locf(df)。它在动物园图书馆。 -
为什么要将混合类型存储在矩阵中?为什么不是数据框?无论哪种方式,您似乎都需要某种类型的模糊连接,谷歌一下。
-
我会选择上面的@David。根据地址对数据框进行排序并使用
na.locf()。试试看。 -
如果前 5 个字符是不同的(一旦数据变大就值得怀疑),
library(tidyverse) ; AD567 %>% group_by(addr5 = substr(address, 1, 5)) %>% fill(tract) %>% fill(tract, .direction = 'up'),但如果始终填写第一个值,您真的可以只使用AD567 %>% fill(tract). -
@alistaire 谢谢你,这在 2500 个案例中除了一个案例之外都成功了