通过最佳字符串匹配对数据框中的字符串变量进行分组以生成子集
Grouping string variables from a dataframe by best string match to make subsets
我有一个数据框,其中有一列包含国家名称。即使是同一个国家,这些名字的写法也不同,例如,大小写不同,有些字母缺失,有些字母多余等等。
所以我需要将它们分组到相似的模式中。例如,我有两个属于同一类别的观察结果:("Brasil","brazil"),我需要将它们放在一起。我无法手动执行此操作,因为整个数据框由约 10 000 个观察值组成。
在一个类别中做出相似的观察后,我需要从这个类别中做出一些子集。
是否有一种可能的解决方案,可以将这些相似的名称分组到一个类别中,然后使用该类别与数据框中的其他列创建子集?
我尝试使用 agrep 函数但没有成功。
number <- c(1:6)
country <- c("Brasil","brazil","Costa Rica","costarrica","suiza","Holanda")
example <- data.frame(number,country)
agrupamiento <- for (i in 1:nrow(example)){
agrep(example$country[i], example$country,
max.distance = 0.1,ignore.case = TRUE)
}
使用 stringdist::phonetic
为您处理示例数据集
library(stringdist)
example$ph=phonetic(example$country)
example
number country ph
1 1 Brasil B624
2 2 brazil B624
3 3 Costa Rica C236
4 4 costarrica C236
5 5 suiza S200
6 6 Holanda H453
然后,我们拆分它
out <- split(example,f = example$ph )
out
$B624
number country ph
1 1 Brasil B624
2 2 brazil B624
$C236
number country ph
3 3 Costa Rica C236
4 4 costarrica C236
$H453
number country ph
6 6 Holanda H453
$S200
number country ph
5 5 suiza S200
我有一个数据框,其中有一列包含国家名称。即使是同一个国家,这些名字的写法也不同,例如,大小写不同,有些字母缺失,有些字母多余等等。
所以我需要将它们分组到相似的模式中。例如,我有两个属于同一类别的观察结果:("Brasil","brazil"),我需要将它们放在一起。我无法手动执行此操作,因为整个数据框由约 10 000 个观察值组成。
在一个类别中做出相似的观察后,我需要从这个类别中做出一些子集。
是否有一种可能的解决方案,可以将这些相似的名称分组到一个类别中,然后使用该类别与数据框中的其他列创建子集?
我尝试使用 agrep 函数但没有成功。
number <- c(1:6)
country <- c("Brasil","brazil","Costa Rica","costarrica","suiza","Holanda")
example <- data.frame(number,country)
agrupamiento <- for (i in 1:nrow(example)){
agrep(example$country[i], example$country,
max.distance = 0.1,ignore.case = TRUE)
}
使用 stringdist::phonetic
library(stringdist)
example$ph=phonetic(example$country)
example
number country ph
1 1 Brasil B624
2 2 brazil B624
3 3 Costa Rica C236
4 4 costarrica C236
5 5 suiza S200
6 6 Holanda H453
然后,我们拆分它
out <- split(example,f = example$ph )
out
$B624
number country ph
1 1 Brasil B624
2 2 brazil B624
$C236
number country ph
3 3 Costa Rica C236
4 4 costarrica C236
$H453
number country ph
6 6 Holanda H453
$S200
number country ph
5 5 suiza S200