我是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个物品,每个物品的长度,高度和宽度也是如此。
答案 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