首页 > 解决方案 > 创建一个列表子集数据框并根据 r 中的先前加入其他列表

问题描述

我有每个产品的时间序列

ts <- list()
ts[["p1"]] <- ts(seq(1,5), start=c(2019,1), frequency=12)
ts[["p2"]] <- ts(seq(1,5), start=c(2019,1), frequency=12)
ts[["p3"]] <- ts(seq(1,5), start=c(2019,1), frequency=12)
ts[["p4"]] <- ts(seq(1,5), start=c(2019,1), frequency=12)
ts[["p5"]] <- ts(seq(1,5), start=c(2019,1), frequency=12)

以及数据框中产品类别之间的关系

category <- c("cA","cA","cB","cB","cB")
product <- c("p1","p2","p3","p4","p5")
df_product_category <- data.frame(product,category)

我首先想要每个类别的列表

list_category <- list(unique(df_product_category$category))
#this doesn´t work

然后我想为每个类别创建另一个列表,其中包含该类别中的所有产品

list_category <- c("cA","cB")

一旦我有了这个列表,我需要一个包含该类别中每个产品的每个类别的嵌套列表

list_product_category <- list()
list_product_category$'cA' <- c("p1","p2")
list_product_category$'cB' <- c("p2","p3","p4")

然后我希望创建另一个列表嵌套category-product-ts 像这样:

ts_list_product_category <- list()
ts_list_product_category[[cA]]$p1 <- ts[["p1"]]
ts_list_product_category[[cA]]$p2 <- ts[["p2"]]
ts_list_product_category[[cB]]$p3 <- ts[["p3"]]
ts_list_product_category[[cB]]$p4 <- ts[["p4"]]
ts_list_product_category[[cB]]$p5 <- ts[["p5"]]

提前致谢 :)

标签: rlist

解决方案


试试这个...一个健壮的方法。

library(tidyverse)

(d <- df_product_category %>% group_by(category) %>% nest()) %>% glimpse()

输出数据集结构

Observations: 2
Variables: 2
Groups: category [2]
$ category <fct> cA, cB
$ data     <list> [<tbl_df[2 x 1]>, <tbl_df[3 x 1]>]

推荐阅读