基于部分匹配文本重塑data.frame并求和(package stringdist)

基于部分匹配文本重塑data.frame并求和(package stringdist),r,dataframe,dplyr,reshape2,stringdist,R,Dataframe,Dplyr,Reshape2,Stringdist,我在一份旧名单上工作。人们的名字写得不同,但实际上,他们是同一个人。我使用stringdist包计算字符串之间的距离,以找到可能相同的名称 我的数据的一个小例子: data <- data.frame(column1 = c("Lalande, Pierre","Lalande, P","Tertre, Girard ","Tertre Girard du"), column2 = c(4, 5, 10, 1)) 我尝试的:使用stringdis

我在一份旧名单上工作。人们的名字写得不同,但实际上,他们是同一个人。我使用stringdist包计算字符串之间的距离,以找到可能相同的名称

我的数据的一个小例子:

 data <- data.frame(column1 = c("Lalande, Pierre","Lalande, P","Tertre, Girard ","Tertre Girard du"),
                    column2 = c(4, 5, 10, 1))
我尝试的:使用stringdist包

 library (stringdist)
 distance <- stringdistmatrix(data$column1,
                              useNames="strings",
                              method="lv")
 distance2 = as.matrix(distance)
重塑

library(reshape2)
out <- unique(melt(distance2))
只保留好的线路:

out2 <- out %>%
   filter (value>0 & value<5)
out2
你怎么能做到这一点?(对原始data.frame column2值求和)


我确信有一种更干净的方法可以做到这一点,但这在BaseR中有效

 data <- data.frame(column1 = c("Lalande, Pierre","Lalande, P","Tertre, Girard ","Tertre Girard du"),
               column2 = c(4, 5, 10, 1))

感谢您对@Wyldsour的关注。但是,我不能基于正则表达式。我必须处理更大的数据,有许多不同的人名条目(并使用文本距离包)
           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
          Var1             Var2     value
1 Tertre Girard du  Tertre, Girard      3
2  Tertre, Girard  Tertre Girard du     3
Var1            Var2                 Column3(summing)
Lalande, Pierre    Lalande, P               9                
Tertre, Girard    Tertre Girard du         11
 data <- data.frame(column1 = c("Lalande, Pierre","Lalande, P","Tertre, Girard ","Tertre Girard du"),
               column2 = c(4, 5, 10, 1))
 data$column3 <- gsub(",.*| .*",  "", data$column1) 
  merge(t(unstack(data[c(1,3)])),aggregate(data$column2, by=list(gsub(",.*| .*",  "", data$column1)), FUN=sum), by.x = "row.names", by.y = "Group.1")