我有一个包含三个变量(州、邮政编码、姓名)的大型数据集。这里有一个小的提取:
zz <- "State Zipcode Name
IL 60693 THISISTHEFIRST
IL 60693 TISISTHEFIRS
OH 45271 THISISTHEFIRST
CA 94085 THISISTHESECOND
CA 94085 THISISTHESECOND
CA 94085 THISISTHESECCOND
SC 29645 THISISTHETHIRD
SC 29645 THISISTHETHIRD
SC 29645 THISISTHETHIRD
SC 29645 THISISTHEFOURTH
SC 29645 ISISTHEFOURTH"
Data <- read.table(text=zz, header = TRUE)
我需要为以相同州、邮政编码和名称为特征的观察创建一个唯一 ID。然而,有些名称拼写错误,即使它们实际上代表相同的主题(例如 THISISTHEFIRST 与 TISISISTHEFIRS)
我想以这样的方式结束:
State Zipcode Name ID
IL 60693 THISISTHEFIRST 1
IL 60693 TISISTHEFIRS 1
OH 45271 THISISTHEFIRST 2
CA 94085 THISISTHESECOND 3
CA 94085 THISISTHESECOND 3
CA 94085 THISISTHESECCOND 3
WI 53022 THISISTHETHIRD 4
WI 53022 THISISTHETHIRD 4
WI 53022 THISISTHETHIRD 4
SC 29645 THISISTHEFOURTH 5
SC 29645 ISISTHEFOURTH 5
如何快速有效地创建唯一 ID?
最佳答案
您可以使用模糊匹配对 agrep
执行类似的操作。您可以调整编辑距离。
Data$bins <- sapply(Data$Name, function(n)
paste(as.integer(agrepl(n, Data$Name, max.distance = 2)), collapse=""))
Data$Group <- as.integer(as.factor(Data$bins))
# State Zipcode Name bins Group
# 1 IL 60693 THISISTHEFIRST 11100000000 4
# 2 IL 60693 TISISTHEFIRS 11100000000 4
# 3 OH 45271 THISISTHEFIRST 11100000000 4
# 4 CA 94085 THISISTHESECOND 00011100000 3
# 5 CA 94085 THISISTHESECOND 00011100000 3
# 6 CA 94085 THISISTHESECCOND 00011100000 3
# 7 SC 29645 THISISTHETHIRD 00000011100 2
# 8 SC 29645 THISISTHETHIRD 00000011100 2
# 9 SC 29645 THISISTHETHIRD 00000011100 2
# 10 SC 29645 THISISTHEFOURTH 00000000011 1
# 11 SC 29645 ISISTHEFOURTH 00000000011 1
关于r - 如何在 r 中创建一个唯一的 ID 来消除字符串歧义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31076079/