基于部分匹配文本重塑data.frame并求和(package stringdist)
我在一份旧名单上工作。人们的名字写得不同,但实际上,他们是同一个人。我使用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
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")