我处理旧名单。人们的名字写的不同,但实际上,这些人是同一个人。我使用stringdist包计算字符串之间的距离,以找到名称可能相同。
我的数据的一个小例子:
data <- data.frame(column1 = c("Lalande, Pierre","Lalande, P","Tertre, Girard ","Tertre Girard du"),
column2 = c(4, 5, 10, 1))
它给出了什么:
column1 column2
Lalande, Pierre 4
Lalande, P 5
Tertre, Girard 10
Tertre Girard du 1
我尝试过:使用stringdist包
library (stringdist)
distance <- stringdistmatrix(data$column1,
useNames="strings",
method="lv")
distance2 = as.matrix(distance)
距离&lt; 5:准相等的字符串
Lalande, Pierre Lalande, P Tertre, Girard
Lalande, P 5
Tertre, Girard 11 13
Tertre Girard du 14 15 3
重塑
library(reshape2)
out <- unique(melt(distance2))
它给出了什么:
Var1 Var2 value
1 Lalande, Pierre Lalande, Pierre 0
2 Lalande, P Lalande, Pierre 5
3 Tertre, Girard Lalande, Pierre 11
4 Tertre Girard du Lalande, Pierre 14
5 Lalande, Pierre Lalande, P 5
6 Lalande, P Lalande, P 0
7 Tertre, Girard Lalande, P 13
8 Tertre Girard du Lalande, P 15
9 Lalande, Pierre Tertre, Girard 11
10 Lalande, P Tertre, Girard 13
11 Tertre, Girard Tertre, Girard 0
12 Tertre Girard du Tertre, Girard 3
13 Lalande, Pierre Tertre Girard du 14
14 Lalande, P Tertre Girard du 15
15 Tertre, Girard Tertre Girard du 3
16 Tertre Girard du Tertre Girard du 0
只保留良好的界限:
out2 <- out %>%
filter (value>0 & value<5)
out2
最终但没有我的专栏3!
Var1 Var2 value
1 Tertre Girard du Tertre, Girard 3
2 Tertre, Girard Tertre Girard du 3
怎么办呢? (总结我的原始data.frame column2值)
Var1 Var2 Column3(summing)
Lalande, Pierre Lalande, P 9
Tertre, Girard Tertre Girard du 11
答案 0 :(得分:1)
我确信有更简洁的方法可以做到这一点,但这适用于基地R.
const char *
根据模式匹配创建列
data <- data.frame(column1 = c("Lalande, Pierre","Lalande, P","Tertre, Girard ","Tertre Girard du"),
column2 = c(4, 5, 10, 1))
这里是合并的x部分,我们正在拆分并转换第1列和第3列
对于合并的y部分,我们通过匹配列3
进行聚合x和y由相应的匹配列合并
data$column3 <- gsub(",.*| .*", "", data$column1)