向表中查找列表列表并编写新的列表列表 - R.

时间:2018-01-19 09:33:25

标签: r

我是R和Stackoverflow的新手。经过Stackoverflow搜索,我找不到任何可以帮助我的东西。

我有一个项目数据框和一个列表,列出了供应商产品可以组合在一起的组合:

日期框架:

{"alg":"RS256"}

使用listParts(2)函数派生的列表(a)列表:

Item Barcode Source    SourceNum
  <int>   <int> <chr>         <int>
1     1     100 Supplier1         1
2     2     101 Supplier1         1
3     3     102 Supplier2         2
4     4     103 Supplier2         2

我需要获取每个列表,查找这些SourceNums表示的项目并构建项目条形码列表。

例如:

(1,2)中的[1]必须查找列SourceNum并读取条形码并将其保存到条形码列表中,以便输出如下:

[1] (1,2)
[1] (1)(2)

源的数量需要是变量,因为它不总是2。

我的结束输出是从第二个表(df2)获取具有尺寸的项目列表,如下所示:

b[1] (100,101,102,103)
b[2] (100,101),(102,103)

因此对于b [1]我需要一个包含4个项目的1个对象的列表(因为这4个项目一起列在1个列表中),但是每个项目还需要有3个元素从这个表中读取长度,高度和宽度。 b [2]应该是2个物品的清单,每个物品有2个物品,每个物品的长度,高度和宽度也是如此。

1 个答案:

答案 0 :(得分:0)

以下两种方法可以做到。

library('tidyverse')
library('partitions')

df <- read_table2('Item Barcode Source    SourceNum
1     100 Supplier1         1
2     101 Supplier1         1
3     102 Supplier2         2
4     103 Supplier2         2')

list_parts <- listParts(2)

第一种方法是将列表和map每个SourceNum展平为相应的Barcode。然后使用relist重新创建原始结构。

barcodes <- list_parts %>%
  unlist %>%
  map(~df$Barcode[df$SourceNum == .]) %>%
  relist(list_parts)

str(barcodes)
#> List of 2
#>  $ :List of 1
#>   ..$ 1:List of 2
#>   .. ..$ : int [1:2] 100 101
#>   .. ..$ : int [1:2] 102 103
#>   ..- attr(*, "class")= chr [1:2] "list" "equivalence"
#>  $ :List of 2
#>   ..$ 1:List of 1
#>   .. ..$ : int [1:2] 100 101
#>   ..$ 2:List of 1
#>   .. ..$ : int [1:2] 102 103
#>   ..- attr(*, "class")= chr [1:2] "list" "equivalence"

另一种方法是使用嵌套的map s。

barcodes <- listParts(2) %>%
  map(map, map, ~df$Barcode[df$SourceNum == .])

str(barcodes)
#> List of 2
#>  $ :List of 1
#>   ..$ 1:List of 2
#>   .. ..$ : int [1:2] 100 101
#>   .. ..$ : int [1:2] 102 103
#>  $ :List of 2
#>   ..$ 1:List of 1
#>   .. ..$ : int [1:2] 100 101
#>   ..$ 2:List of 1
#>   .. ..$ : int [1:2] 102 103