在 R 中将 stringdist 用于两个具有交叉连接的数据集
using stringdist for two dataset with crossjoin in R
stringdist 与 vector 一起工作
stringdist("ca","abc")
[1] 3
但我想匹配两个数据集
第一
structure(list(id = structure(c(5L, 2L, 4L, 3L, 6L, 1L, 7L), .Label = c("SOFT Ватные палочки 100 ПЭ (БЭЛЛ",
"Лимоны 55+", "МАКФА макароныоны перья любит. в/с", "Пакет Магнит белый (Пластиктре",
"Салфетки бумажные колор 100шт PL", "ТОБУС Сушки Челночок 0,5кг флоуп",
"ФЕТАКСА Сырный продукт 60% 400г("), class = "factor")), .Names = "id", class = "data.frame", row.names = c(NA,
-7L))
第二个
structure(list(id2 = structure(c(4L, 3L, 2L, 5L, 1L, 6L), .Label = c("ватные палочки ",
"МАКФА макароныоны перья ", "пакет белый", "салфетки", "сушки",
"сырный продукт"), class = "factor")), .Names = "id2", class = "data.frame", row.names = c(NA,
-6L))
所有这些字符串都必须通过交叉连接匹配
IE。输出
id1 id2 weight.between.strings
1 Салфетки бумажные колор 100шт PL салфетки 1
2 Салфетки бумажные колор 100шт PL пакет белый 2
3 Салфетки бумажные колор 100шт PL макфа перья 3
4 Салфетки бумажные колор 100шт PL сушки 4
5 Салфетки бумажные колор 100шт PL ватные палочки 5
6 Салфетки бумажные колор 100шт PL сырный продукт 6
7 Лимоны 55+ салфетки 7
8 Лимоны 55+ пакет белый 8
9 Лимоны 55+ макфа перья 9
10 Лимоны 55+ сушки 10
11 Лимоны 55+ ватные палочки 11
12 Лимоны 55+ сырный продукт 12
13 Пакет Магнит белый (Пластиктре салфетки 13
14 Пакет Магнит белый (Пластиктре пакет белый 14
15 Пакет Магнит белый (Пластиктре макфа перья 15
16 Пакет Магнит белый (Пластиктре сушки 16
17 Пакет Магнит белый (Пластиктре ватные палочки 17
18 Пакет Магнит белый (Пластиктре сырный продукт 18
19 МАКФА макароныоны перья любит. в/с салфетки 19
20 МАКФА макароныоны перья любит. в/с пакет белый 20
21 МАКФА макароныоны перья любит. в/с макфа перья 21
22 МАКФА макароныоны перья любит. в/с сушки 22
23 МАКФА макароныоны перья любит. в/с ватные палочки 23
24 МАКФА макароныоны перья любит. в/с сырный продукт 24
25 ТОБУС Сушки Челночок 0,5кг флоуп салфетки 25
26 ТОБУС Сушки Челночок 0,5кг флоуп пакет белый 26
27 ТОБУС Сушки Челночок 0,5кг флоуп макфа перья 27
28 ТОБУС Сушки Челночок 0,5кг флоуп сушки 28
29 ТОБУС Сушки Челночок 0,5кг флоуп ватные палочки 29
30 ТОБУС Сушки Челночок 0,5кг флоуп сырный продукт 30
31 SOFT Ватные палочки 100 ПЭ (БЭЛЛ салфетки 31
32 SOFT Ватные палочки 100 ПЭ (БЭЛЛ пакет белый 32
33 SOFT Ватные палочки 100 ПЭ (БЭЛЛ макфа перья 33
34 SOFT Ватные палочки 100 ПЭ (БЭЛЛ сушки 34
35 SOFT Ватные палочки 100 ПЭ (БЭЛЛ ватные палочки 35
36 SOFT Ватные палочки 100 ПЭ (БЭЛЛ сырный продукт 36
37 ФЕТАКСА Сырный продукт 60% 400г( салфетки 37
38 ФЕТАКСА Сырный продукт 60% 400г( пакет белый 38
39 ФЕТАКСА Сырный продукт 60% 400г( макфа перья 39
40 ФЕТАКСА Сырный продукт 60% 400г( сушки 40
41 ФЕТАКСА Сырный продукт 60% 400г( ватные палочки 41
42 ФЕТАКСА Сырный продукт 60% 400г( сырный продукт 42
如何得到想要的结果?这里矩阵 7x6 字符串。在真实数据中 20 000、20 000。
它是乌克兰字符串。这里的商品名称,内容无所谓。问题是如何匹配这个字符串。
我不确定我是否理解您想要的输出,但下面使用默认距离 "osa"
计算两个数据帧的所有字符串对之间的距离。
在下文中,我将您的第一个 data.frame first
和第二个 second
.
命名为
library(stringdist)
res <- lapply(first$id, function(x){
d <- stringdist(x, second$id2)
setNames(d, second$id2)
})
names(res) <- first$id
res <- do.call(rbind, res)
res <- reshape2::melt(res)
names(res)[1:2] <- c("id1", "id2")
head(res)
# id1 id2 value
#1 Салфетки бумажные колор 100шт PL салфетки 25
#2 Лимоны 55+ салфетки 10
#3 Пакет Магнит белый (Пластиктре салфетки 26
#4 МАКФА макароныоны перья любит. в/с салфетки 31
#5 ТОБУС Сушки Челночок 0,5кг флоуп салфетки 30
#6 SOFT Ватные палочки 100 ПЭ (БЭЛЛ салфетки 28
还有一个计算距离矩阵的函数stringdistmatrix
。但是考虑到你的真实矩阵的维度,这可能是不切实际的。
res2 <- stringdistmatrix(first$id, second$id2)
dimnames(res2) <- list(first$id, second$id2)
res2
stringdist 与 vector 一起工作
stringdist("ca","abc")
[1] 3
但我想匹配两个数据集 第一
structure(list(id = structure(c(5L, 2L, 4L, 3L, 6L, 1L, 7L), .Label = c("SOFT Ватные палочки 100 ПЭ (БЭЛЛ",
"Лимоны 55+", "МАКФА макароныоны перья любит. в/с", "Пакет Магнит белый (Пластиктре",
"Салфетки бумажные колор 100шт PL", "ТОБУС Сушки Челночок 0,5кг флоуп",
"ФЕТАКСА Сырный продукт 60% 400г("), class = "factor")), .Names = "id", class = "data.frame", row.names = c(NA,
-7L))
第二个
structure(list(id2 = structure(c(4L, 3L, 2L, 5L, 1L, 6L), .Label = c("ватные палочки ",
"МАКФА макароныоны перья ", "пакет белый", "салфетки", "сушки",
"сырный продукт"), class = "factor")), .Names = "id2", class = "data.frame", row.names = c(NA,
-6L))
所有这些字符串都必须通过交叉连接匹配 IE。输出
id1 id2 weight.between.strings
1 Салфетки бумажные колор 100шт PL салфетки 1
2 Салфетки бумажные колор 100шт PL пакет белый 2
3 Салфетки бумажные колор 100шт PL макфа перья 3
4 Салфетки бумажные колор 100шт PL сушки 4
5 Салфетки бумажные колор 100шт PL ватные палочки 5
6 Салфетки бумажные колор 100шт PL сырный продукт 6
7 Лимоны 55+ салфетки 7
8 Лимоны 55+ пакет белый 8
9 Лимоны 55+ макфа перья 9
10 Лимоны 55+ сушки 10
11 Лимоны 55+ ватные палочки 11
12 Лимоны 55+ сырный продукт 12
13 Пакет Магнит белый (Пластиктре салфетки 13
14 Пакет Магнит белый (Пластиктре пакет белый 14
15 Пакет Магнит белый (Пластиктре макфа перья 15
16 Пакет Магнит белый (Пластиктре сушки 16
17 Пакет Магнит белый (Пластиктре ватные палочки 17
18 Пакет Магнит белый (Пластиктре сырный продукт 18
19 МАКФА макароныоны перья любит. в/с салфетки 19
20 МАКФА макароныоны перья любит. в/с пакет белый 20
21 МАКФА макароныоны перья любит. в/с макфа перья 21
22 МАКФА макароныоны перья любит. в/с сушки 22
23 МАКФА макароныоны перья любит. в/с ватные палочки 23
24 МАКФА макароныоны перья любит. в/с сырный продукт 24
25 ТОБУС Сушки Челночок 0,5кг флоуп салфетки 25
26 ТОБУС Сушки Челночок 0,5кг флоуп пакет белый 26
27 ТОБУС Сушки Челночок 0,5кг флоуп макфа перья 27
28 ТОБУС Сушки Челночок 0,5кг флоуп сушки 28
29 ТОБУС Сушки Челночок 0,5кг флоуп ватные палочки 29
30 ТОБУС Сушки Челночок 0,5кг флоуп сырный продукт 30
31 SOFT Ватные палочки 100 ПЭ (БЭЛЛ салфетки 31
32 SOFT Ватные палочки 100 ПЭ (БЭЛЛ пакет белый 32
33 SOFT Ватные палочки 100 ПЭ (БЭЛЛ макфа перья 33
34 SOFT Ватные палочки 100 ПЭ (БЭЛЛ сушки 34
35 SOFT Ватные палочки 100 ПЭ (БЭЛЛ ватные палочки 35
36 SOFT Ватные палочки 100 ПЭ (БЭЛЛ сырный продукт 36
37 ФЕТАКСА Сырный продукт 60% 400г( салфетки 37
38 ФЕТАКСА Сырный продукт 60% 400г( пакет белый 38
39 ФЕТАКСА Сырный продукт 60% 400г( макфа перья 39
40 ФЕТАКСА Сырный продукт 60% 400г( сушки 40
41 ФЕТАКСА Сырный продукт 60% 400г( ватные палочки 41
42 ФЕТАКСА Сырный продукт 60% 400г( сырный продукт 42
如何得到想要的结果?这里矩阵 7x6 字符串。在真实数据中 20 000、20 000。 它是乌克兰字符串。这里的商品名称,内容无所谓。问题是如何匹配这个字符串。
我不确定我是否理解您想要的输出,但下面使用默认距离 "osa"
计算两个数据帧的所有字符串对之间的距离。
在下文中,我将您的第一个 data.frame first
和第二个 second
.
library(stringdist)
res <- lapply(first$id, function(x){
d <- stringdist(x, second$id2)
setNames(d, second$id2)
})
names(res) <- first$id
res <- do.call(rbind, res)
res <- reshape2::melt(res)
names(res)[1:2] <- c("id1", "id2")
head(res)
# id1 id2 value
#1 Салфетки бумажные колор 100шт PL салфетки 25
#2 Лимоны 55+ салфетки 10
#3 Пакет Магнит белый (Пластиктре салфетки 26
#4 МАКФА макароныоны перья любит. в/с салфетки 31
#5 ТОБУС Сушки Челночок 0,5кг флоуп салфетки 30
#6 SOFT Ватные палочки 100 ПЭ (БЭЛЛ салфетки 28
还有一个计算距离矩阵的函数stringdistmatrix
。但是考虑到你的真实矩阵的维度,这可能是不切实际的。
res2 <- stringdistmatrix(first$id, second$id2)
dimnames(res2) <- list(first$id, second$id2)
res2