R 我想找到重复的数据帧的基础上的名字和姓氏。使用部分字符串匹配
这是一个示例数据帧,我只想使用部分字符串匹配来确定它们是否有任何可以找到重复项的函数 df 数据准备 使用R 我想找到重复的数据帧的基础上的名字和姓氏。使用部分字符串匹配,r,duplicates,match,stringr,R,Duplicates,Match,Stringr,这是一个示例数据帧,我只想使用部分字符串匹配来确定它们是否有任何可以找到重复项的函数 df 数据准备 使用dplyr,首先将first和last名称连接成一个整体名称 library(dplyr) df1 <- df %>% rowwise() %>% # rowwise operation mutate(whole=paste0(name,last,collapse="")) # concatenate fi
dplyr
,首先将first
和last
名称连接成一个整体
名称
library(dplyr)
df1 <- df %>%
rowwise() %>% # rowwise operation
mutate(whole=paste0(name,last,collapse="")) # concatenate first and last name by row
ungroup() # remove rowwise grouping
分组相似字符串
此递归函数将使用agrepl
、逻辑近似grep查找相关字符串组,并对它们进行分组和标记grp
注意字符串之间的差异公差由max.distance
设置。数字越低,要求就越严格
desired <- NULL
grp <- 1
special <- function(x, y, grp) {
if (nrow(y) < 1) { # if y is empty return data
return(x)
} else {
similar <- agrepl(y$whole[1], y$whole, max.distance=0.4) # find similar occurring strings
x <- rbind(x, y[similar,] %>% mutate(grp=grp)) # save similar strings
y <- setdiff(y, y[similar,]) # remaining non-similar strings
special(x, y, grp+1) # run function again on non-similar strings
}
}
desired <- special(desired, df1, grp)
要摆脱整个
df2 <- df1 %>% select(-whole)
df2%选择(-整型)
非常感谢您的帮助,我还尝试了其他部分文本匹配,如pmach等。
desired <- NULL
grp <- 1
special <- function(x, y, grp) {
if (nrow(y) < 1) { # if y is empty return data
return(x)
} else {
similar <- agrepl(y$whole[1], y$whole, max.distance=0.4) # find similar occurring strings
x <- rbind(x, y[similar,] %>% mutate(grp=grp)) # save similar strings
y <- setdiff(y, y[similar,]) # remaining non-similar strings
special(x, y, grp+1) # run function again on non-similar strings
}
}
desired <- special(desired, df1, grp)
name last whole grp
1 Joseph Smith JosephSmith 1
2 Jose Smith JoseSmith 1
3 Joseph Smit JosephSmit 1
4 Maria Cruz MariaCruz 2
5 maria cru mariacru 2
6 Mari Cruz MariCruz 2
df2 <- df1 %>% select(-whole)