当数据表现良好时,识别unique
值是直截了当的。在这里,我正在寻找一种从字符向量中获取近似唯一值列表的方法。
让x
成为实体名称略有不同的向量,例如Kentucky loader
可能显示为Kentucky load
或Kentucky loader (additional info)
或有些相似。
x <- c("Kentucky load" ,
"Kentucky loader (additional info)",
"CarPark Gifhorn (EAP)",
"Car Park Gifhorn (EAP) new 1.5.2012",
"Center Kassel (neu 01.01.2014)",
"HLLS Bremen (EAP)",
"HLLS Bremen (EAP) new 06.2013",
"Hamburg total sum (abc + TBL)",
"Hamburg total (abc + TBL) new 2012")
我得到的是:
c("Kentucky loader" ,
"Car Park Gifhorn (EAP)",
"Center Kassel (neu 01.01.2014)",
"HLLS Bremen (EAP)",
"Hamburg total (abc + TBL)")
观
但我想这将是一项标准任务(对于那些使用&#34;脏&#34;定期数据的R用户),所以我假设会有一套标准方法。
是否有人提示或是否有包装可以执行此操作?
答案 0 :(得分:1)
正如@Jaap所说,尝试使用OpenRefine。 data carpentry course非常好。
如果您确实希望留在R中,请使用agrepl
为您的示例提供解决方案:
z <- sapply(x, function(z) agrepl(z, x, max.distance = 0.2))
apply(z, 1, function(myz) x[myz][which.min(nchar(x[myz]))])
给出了x的每个成员的字符中最小的匹配:
[1] "Kentucky load" "Kentucky load" "CarPark Gifhorn (EAP)"
[4] "CarPark Gifhorn (EAP)" "Center Kassel (neu 01.01.2014)" "HLLS Bremen (EAP)"
[7] "HLLS Bremen (EAP)" "Hamburg total sum (abc + TBL)" "Hamburg total sum (abc + TBL)"
如果您希望保持矢量的顺序与其他矢量匹配(或在数据帧的列上使用),这很好。
您可以在此输出上调用unique
以获得所需的输出。