我有一个包含三个变量(State,Zipcode,Name)的大型数据集.这里有一个小提取:
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)
Run Code Online (Sandbox Code Playgroud)
我需要创建一个唯一的ID,用于以相同的State,Zipcode,Name为特征的观察.然而,有些名字拼写错误,即使它们确实代表同一主题(例如THISISTHEFIRST与TISISTHEFIRS)
我想最终得到这样的东西:
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
Run Code Online (Sandbox Code Playgroud)
我怎样才能以快速有效的方式创建唯一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
Run Code Online (Sandbox Code Playgroud)