如何在R中迭代地过滤列表中的列表,或者如何同时使用两个条件过滤数据表,在运行时创建对象

cfh9epnr  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(115)

我正在制作一个数据表,其中包含了特许经营权下某些商店对某些产品的需求量,目标是预测每个商店对每种产品的需求量。
下面是我的数据集的"头":
头(训练数据集)
| 周|商店_ID|产品ID|销售额|返回|需求|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 3 |小行星15766 |十二一二 |三个 |无 |三个|
| 3 |小行星15766 |小行星 |四个 |无|四个|
| 3 |小行星15766 |小行星1238 |四个 |无|四个|
| 三个|小行星15766 |小行星124|四个 |无|四个|
| 三个|小行星15766|1242|三个|无|三个|
| 3 |小行星15766|小行星125|五个|无|五个|
我最初的方法是对原始数据集进行子集化,这样每个商店的每个产品都有一个数据集。例如,如果有3个产品,即产品1、2和3,以及2个商店A和B,我希望有一个数据集包含商店A上产品1的所有数据,另一个数据集包含商店B上产品1的所有数据,依此类推。
由于有超过2500个产品,我的第一个尝试是尝试自动化,用一个循环或apply系列中的一些东西,代码如下:

library(dplyr)
product.n <- filter(train_dataset, product_id == n)

其中"n"是一个产品ID,可以从另一个专用数据集中获取。在本例中,产品ID是整型变量。假设我将这个专用数据集加载为"prods",我尝试了如下操作:

for (i in prods){
    a = prods$product_id[i]
    product.a <- paste("product", a)
    product.a <- filter(train_dataset, product_id == a)
}

但是没有用。然后我试了试

products <- split(train_dataset, f = train_dataset$product_id)

它返回了一个由多个列表组成的列表,每个列表包含某个产品ID的所有数据。然后,为了根据商店ID对该列表进行子集化,我发现我无法使用以相同方式构造的代码,因为"train_dataset $store_id"无法放在split函数的"f"参数上。为了解决这个问题,我尝试使用lapply:

products.per.store <- lapply(products, '[[', "store_id")

但没有成功。
我试着把所有的子列表转换成 Dataframe ,然后再次尝试应用同样的拆分过程,全部都是自动的。我手动做的对一个子列表有效,但是我不能自动化它,我也不认为这是一个有效的方法。我也想过从dplyr中组合"filter"和"group by",但是,因为无法自动化第一个代码示例,所以没有进一步尝试。
下面是我所针对的模式中的一个数据集的"head"(只包含某个商店ID中某个产品ID的所有数据):
标题(产品41_store684023)
| 周|商店_ID|产品ID|销售额|返回|需求|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 3 |小行星684 |四十一 |三十|无 |三十|
| 4 |小行星684 |四十一 |九十五 |无 |九十五|
| 5 |小行星684 |四十一 |八十二 |无 |八十二|
| 6 |小行星684 |四十一 |三十 |无 |三十|
| 7 |小行星684 |四十一 |六十 |无 |六十|
| 8 |小行星684 |四十一|七十 |无|七十|
我在SO中看到了很多关于列表中的列表操作和关于过滤/拆分/子集化数据集的其他问题,但不幸的是,我无法推断出这个问题的任何内容,所以如果之前已经回答过这个问题,我很抱歉。
任何帮助都将不胜感激。
谢谢!
P.S.我将在这里添加一个示例dput文件,其中包含来自2个产品ID(ID 41和151)的数据:

structure(list(Week = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L), Store_ID = c(684023L, 681747L, 685079L, 1623763L, 1035265L, 2482890L, 1546790L, 4586525L, 684023L, 1938075L, 681747L, 685079L, 1623763L, 2482890L, 1451516L, 4586525L, 2470338L, 684023L, 1938075L, 681747L, 1623763L, 2482890L, 2470338L, 146030L, 684023L, 1938075L, 465617L, 681747L, 1623763L, 2482890L, 1546790L, 4586525L, 2470338L, 1105804L, 2284385L, 146030L, 684023L, 681747L, 1623763L, 2482890L, 1546790L, 4586525L, 2470338L, 2284385L, 146030L, 684023L, 465617L, 681747L, 1623763L, 2482890L, 1546790L, 4586525L, 2470338L, 2284385L, 146030L, 684023L, 1938075L, 681747L, 1623763L, 2482890L, 1546790L, 64209L, 1451306L, 1451307L, 2290541L, 153680L, 817983L, 1163986L, 1873535L, 4286560L, 4498110L, 153547L, 153688L, 153817L, 713342L, 1549943L, 161141L, 1044616L, 1072646L, 1856859L, 1137252L, 1469082L, 1951821L, 9716137L, 1963850L, 153840L, 1524199L, 1133031L, 168596L, 52677L, 167312L, 168521L, 168527L, 168678L, 1915817L, 1915818L, 168631L, 168784L, 434240L, 984120L, 2176784L, 64209L, 1451306L, 1451307L, 2290541L, 153680L, 817983L, 1163986L, 1873535L, 4286560L, 4498110L, 153547L, 153688L, 153817L, 713342L, 1549943L, 161141L, 1044616L, 1072646L, 1856859L, 1137252L, 1469082L, 1951821L, 9716137L, 1963850L, 153840L, 1524199L, 1133031L, 168596L, 52677L, 167312L, 168521L, 168527L, 168678L, 1915817L, 1915818L, 168631L, 168784L, 434240L, 984120L, 2176784L, 2176785L, 64209L, 1451306L, 1451307L, 2290541L, 153680L, 817983L, 1163986L, 4286560L, 4498110L, 153547L, 153688L, 153817L, 713342L, 1549943L, 161141L, 1044616L, 1072646L, 1856859L, 1137252L, 1469082L, 9716137L, 1963850L, 153840L, 1524199L, 168596L, 52677L, 167312L, 168521L, 168527L, 168678L, 1915817L, 1915818L, 168540L, 168631L, 168784L, 434240L, 984120L, 2176784L, 2176785L, 64209L, 1451306L, 1451307L, 2290541L, 153680L, 817983L, 1163986L, 4286560L, 153688L, 153817L, 713342L, 1549943L, 161141L, 1044616L, 1072646L, 1856859L, 1137252L, 1469082L, 9716137L, 1963850L, 153840L, 168596L, 52677L, 167312L, 168521L, 168527L, 168678L, 1915817L, 1915818L, 168540L, 168631L, 168784L, 434240L, 984120L, 2176784L, 64209L, 1451306L, 1451307L, 2290541L, 153680L, 817983L, 1163986L, 1873535L, 4286560L, 153688L, 153817L, 713342L, 1549943L, 161141L, 1044616L, 1072646L, 1856859L, 1137252L, 1469082L, 1951821L, 9716137L, 1963850L, 153840L, 168596L, 52677L, 167312L, 168521L, 168527L, 168678L, 1915817L, 1915818L, 168540L, 168631L, 168784L, 434240L, 984120L, 2176784L, 64209L, 1451306L, 1451307L, 2290541L, 153680L, 817983L, 1163986L, 1873535L, 4286560L, 153547L, 153688L, 153817L, 713342L, 1549943L, 161141L, 1044616L, 1072646L, 1856859L, 1137252L, 1469082L, 1951821L, 9716137L, 1963850L, 153840L, 1524199L, 168596L, 52677L, 167312L, 168521L, 168527L, 168678L, 1915817L, 1915818L, 168540L, 168631L, 168784L, 434240L, 984120L, 2176784L, 2176785L, 64209L, 1451306L, 1451307L, 2290541L, 153680L, 817983L, 1163986L, 1873535L, 4286560L, 153547L, 153688L, 153817L, 713342L, 1549943L, 161141L, 1044616L, 1072646L, 1856859L, 1137252L, 1469082L, 1951821L, 9716137L, 1963850L, 153840L, 1524199L, 4722056L, 1133031L, 168596L, 52677L, 167312L, 168521L, 168527L, 168678L, 1915817L, 1915818L, 168540L, 168631L, 168784L, 434240L, 984120L, 2176784L, 2176785L), Product_ID = c(41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L, 151L), Sales = c(30L, 2064L, 0L, 1022L, 0L, 330L, 200L, 20L, 95L, 105L, 1430L, 0L, 740L, 430L, 5L, 7L, 45L, 82L, 20L, 1686L, 820L, 400L, 25L, 70L, 30L, 40L, 0L, 1250L, 986L, 500L, 80L, 1L, 25L, 138L, 200L, 60L, 60L, 1570L, 1030L, 300L, 50L, 10L, 20L, 100L, 40L, 70L, 30L, 1305L, 1159L, 295L, 60L, 20L, 10L, 110L, 65L, 45L, 70L, 1378L, 1269L, 410L, 40L, 12L, 14L, 7L, 15L, 10L, 15L, 23L, 9L, 18L, 3L, 10L, 13L, 21L, 12L, 17L, 72L, 20L, 9L, 16L, 25L, 12L, 1L, 10L, 25L, 11L, 9L, 12L, 10L, 14L, 20L, 10L, 18L, 11L, 10L, 10L, 3L, 16L, 3L, 5L, 6L, 14L, 8L, 5L, 13L, 5L, 13L, 7L, 6L, 11L, 1L, 3L, 19L, 15L, 13L, 13L, 38L, 27L, 11L, 14L, 13L, 6L, 3L, 14L, 10L, 8L, 3L, 14L, 11L, 12L, 18L, 14L, 24L, 12L, 5L, 10L, 3L, 22L, 24L, 10L, 4L, 8L, 19L, 23L, 4L, 10L, 7L, 17L, 27L, 9L, 4L, 4L, 12L, 17L, 16L, 18L, 32L, 9L, 1L, 16L, 29L, 5L, 22L, 10L, 11L, 6L, 5L, 8L, 28L, 11L, 22L, 10L, 10L, 25L, 18L, 8L, 20L, 18L, 25L, 8L, 16L, 16L, 8L, 5L, 6L, 7L, 17L, 19L, 22L, 18L, 20L, 21L, 20L, 55L, 14L, 4L, 16L, 7L, 3L, 16L, 17L, 15L, 15L, 16L, 24L, 16L, 20L, 17L, 14L, 15L, 6L, 6L, 14L, 19L, 31L, 10L, 15L, 15L, 6L, 7L, 2L, 11L, 18L, 4L, 9L, 13L, 7L, 2L, 8L, 9L, 17L, 2L, 20L, 6L, 10L, 6L, 8L, 20L, 3L, 6L, 16L, 18L, 20L, 28L, 5L, 11L, 10L, 5L, 3L, 17L, 11L, 10L, 2L, 16L, 9L, 8L, 7L, 21L, 43L, 44L, 13L, 20L, 21L, 21L, 26L, 29L, 60L, 38L, 12L, 5L, 16L, 9L, 10L, 3L, 10L, 9L, 8L, 7L, 18L, 15L, 15L, 20L, 40L, 16L, 20L, 15L, 21L, 6L, 10L, 26L, 14L, 8L, 9L, 25L, 14L, 15L, 20L, 6L, 10L, 15L, 14L, 19L, 3L, 22L, 21L, 14L, 8L, 122L, 43L, 8L, 9L, 39L, 18L, 2L, 16L, 23L, 18L, 18L, 1L, 29L, 17L, 30L, 42L, 18L, 55L, 12L, 20L, 15L, 16L, 11L, 12L, 21L, 20L, 13L, 16L), Returns = c(0L, 0L, 9L, 0L, 90L, 0L, 0L, 5L, 0L, 0L, 0L, 20L, 0L, 0L, 0L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 30L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 70L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Demand = c(30L, 2064L, 0L, 1022L, 0L, 330L, 200L, 15L, 95L, 105L, 1430L, 0L, 740L, 430L, 5L, 4L, 45L, 82L, 20L, 1686L, 820L, 400L, 25L, 70L, 30L, 40L, 0L, 1250L, 986L, 500L, 80L, 1L, 25L, 138L, 200L, 60L, 60L, 1570L, 1030L, 300L, 50L, 10L, 20L, 100L, 40L, 70L, 0L, 1305L, 1159L, 295L, 60L, 20L, 10L, 110L, 65L, 45L, 70L, 1378L, 1269L, 410L, 40L, 12L, 14L, 7L, 15L, 10L, 15L, 23L, 9L, 18L, 3L, 10L, 13L, 21L, 12L, 17L, 72L, 20L, 9L, 16L, 25L, 12L, 1L, 10L, 25L, 11L, 9L, 12L, 10L, 14L, 20L, 10L, 18L, 11L, 10L, 10L, 3L, 16L, 3L, 5L, 6L, 14L, 8L, 5L, 13L, 5L, 13L, 7L, 6L, 11L, 1L, 3L, 19L, 15L, 13L, 13L, 38L, 27L, 11L, 14L, 13L, 6L, 3L, 14L, 10L, 8L, 3L, 14L, 11L, 12L, 18L, 14L, 24L, 12L, 5L, 10L, 3L, 22L, 24L, 10L, 4L, 8L, 19L, 23L, 4L, 10L, 7L, 17L, 27L, 9L, 4L, 4L, 12L, 17L, 16L, 18L, 32L, 9L, 1L, 16L, 29L, 5L, 22L, 10L, 11L, 6L, 5L, 8L, 28L, 11L, 22L, 10L, 10L, 25L, 18L, 8L, 20L, 18L, 25L, 8L, 16L, 16L, 8L, 5L, 6L, 7L, 17L, 19L, 22L, 18L, 20L, 21L, 20L, 55L, 14L, 4L, 16L, 7L, 3L, 16L, 17L, 15L, 15L, 16L, 24L, 16L, 20L, 17L, 14L, 15L, 6L, 6L, 14L, 19L, 31L, 10L, 15L, 15L, 6L, 7L, 2L, 11L, 18L, 4L, 9L, 13L, 7L, 2L, 8L, 9L, 17L, 2L, 20L, 6L, 10L, 6L, 8L, 20L, 3L, 6L, 16L, 18L, 20L, 28L, 5L, 11L, 10L, 5L, 3L, 17L, 11L, 10L, 2L, 16L, 9L, 8L, 7L, 21L, 43L, 44L, 13L, 20L, 21L, 21L, 26L, 29L, 60L, 38L, 12L, 5L, 16L, 9L, 10L, 3L, 10L, 9L, 8L, 7L, 18L, 15L, 15L, 20L, 40L, 16L, 20L, 15L, 21L, 6L, 10L, 26L, 14L, 8L, 9L, 25L, 14L, 15L, 20L, 6L, 10L, 15L, 14L, 19L, 3L, 22L, 21L, 14L, 8L, 122L, 43L, 8L, 9L, 39L, 18L, 2L, 16L, 23L, 18L, 18L, 1L, 29L, 17L, 30L, 42L, 18L, 55L, 12L, 20L, 15L, 16L, 11L, 12L, 21L, 20L, 13L, 16L)), row.names = c(NA, -335L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x0000000002611ef0>)

pjngdqdw

pjngdqdw1#

在使用split的方法之后,我设法解决了这个问题。
就像我在这个问题上说的,我的一个尝试是这样开始的:

products <- split(train_dataset, f = train_dataset$product_id)

它创建了一个列表,其中包含各种列表,每个列表包含来自某个产品的所有数据。
为了进一步细分这个子列表,我使用了带有匿名函数的lapply:

products_per_stores <- lapply(products, function(x){split(x, f = x$Store_ID)})

它创建了一个内部有列表的列表,而列表内部又包含列表,子列表的“第一级”包括每个产品id一个列表,“第二级”包括每个产品id与商店id的组合一个列表,这是目标。

wj8zmpe1

wj8zmpe12#

在您第一次尝试使用for循环时,它无法工作,原因有两个:

**首先:**您尝试迭代'prods',正如您所说的,它是一个数据集-没有什么,您可以迭代。因此,如果您想迭代数据集的每一行(如示例所示),您可以使用

for (a in prods$product_id){

**第二个:**您在每次迭代中都覆盖了您的子集。

product.a <- paste("product", a)

但实际上不是这样的,要赋值一个包含'a'的变量名,可以使用assign()函数,如下所示:

assign(paste0("product.", a), filter(train_dataset, product_id == a))

如果您只想为每个产品创建单独的 Dataframe (据我所知,这就是您循环尝试的内容),您也可以只使用id子集,从而允许您只对唯一的id进行迭代。

for(i in unique(prods$product_id)){
  assign(paste0("product.",i), prods[which(prods$product_id == i),])
}

当然,这并不能完全解决您的问题,但可能会帮助您重新审视最初的方法。

相关问题