循环组合 R 中的两列和

问题描述 投票:0回答:1

我尝试在R中通过求和进行列组合。它需要分析仓库中的关联顺序。

例如

原始表

Order |  SKU  | QTY
\#1    | Banana | 1
\#1    | Apple  | 2
\#1    | Pear   | 1
\#1    | Cherry | 2
\#2    | Banana | 4
\#2    | Apple  | 1
\#2    | Grape  | 1
\#3    | Banana | 2
\#3    | Pear   | 1

按出站频率转换表格

Order | Banana | Apple | Pear | Cherry | Grape
\#1    |   1    |   1   |  1   |  1     |
\#2    |   1    |   1   |      |        |  1
\#3    |   1    |       |  1   |        |

以最高 SKU 配对

SKU1   | SKU2  | Free
Banana | Apple | 2
Banana | Pear  | 2
Banana | Cherry| 1
Banana | Grape | 1
Apple  | pear  | 1
Apple  |Cherry | 1
Apple  |Grape  | 1
Pear   |Cherry | 1

香蕉对需要集中批量或存放在仓库。

我是循环的初学者,尝试在 purrr、文本、成对的任何其他内容中进行映射。我找不到信息

我想知道如何解决这一对

我通常处理超过10,000个SKU

Purrr,成对的,无论我不介意的方法,我想解决这个矩阵

r for-loop combinations purrr
1个回答
2
投票

您可以尝试

crossprod
+
xtabs
+
as.data.frame.table

> tbl <- crossprod(!!xtabs(QTY ~ ., df))

> tbl[upper.tri(tbl, TRUE)] <- NA

> na.omit(as.data.frame.table(tbl))
        SKU    SKU.1 Freq
2   Banana   Apple      2
3   Cherry   Apple      1
4   Grape    Apple      1
5   Pear     Apple      1
8   Cherry   Banana     1
9   Grape    Banana     1
10  Pear     Banana     2
14  Grape    Cherry     0
15  Pear     Cherry     1
20  Pear     Grape      0

或者如果您想删除

0
共现,您可以尝试

> tbl <- crossprod(!!xtabs(QTY ~ ., df))

> tbl[upper.tri(tbl, TRUE) | tbl < 1] <- NA

> na.omit(as.data.frame.table(tbl))
        SKU    SKU.1 Freq
2   Banana   Apple      2
3   Cherry   Apple      1
4   Grape    Apple      1
5   Pear     Apple      1
8   Cherry   Banana     1
9   Grape    Banana     1
10  Pear     Banana     2
15  Pear     Cherry     1

数据

df <- structure(list(Order = c(1, 1, 1, 1, 2, 2, 2, 3, 3), SKU = c(" Banana ",
" Apple  ", " Pear   ", " Cherry ", " Banana ", " Apple  ", " Grape  ", 
" Banana ", " Pear   "), QTY = c(1L, 2L, 1L, 2L, 4L, 1L, 1L,
2L, 1L)), class = "data.frame", row.names = c(NA, -9L))
© www.soinside.com 2019 - 2024. All rights reserved.