按列中的唯一值拆分数据框并在全局环境中创建对象

Split dataframe by unique values in column and create objects in global environment

数据示例。

date1 = seq(as.Date("2019/01/01"), by = "month", length.out = 29)
date2= seq(as.Date("2019/01/01"), by = "month", length.out = 29)
date3 = seq(as.Date("2019/01/01"), by = "month", length.out = 29)
date4 = seq(as.Date("2019/01/01"), by = "month", length.out = 10)

subproducts1=rep("1",29)
subproducts2=rep("2",29)
subproductsx=rep("x",29)
subproductsy=rep("y",10)

b1 <- c(rnorm(29,5))
b2 <- c(rnorm(29,5))
b3 <-c(rnorm(29,5))
b4 <- c(rnorm(10,5))


dfone <- data.frame("date"= c(date1,date2,date3,date4),
                "subproduct"= 
                  c(subproducts1,subproducts2,subproductsx,subproductsy),
                "actuals"= c(b1,b2,b3,b4))

问题:如何根据独特的子产品在全局环境中将 dfone 拆分为 4 个数据帧?

我们可以使用group_splitdplyr到return一个list的数据。frame/tibbles

library(dplyr)
dfone %>%
    group_split(subproduct)

拆分成一个 list 并在 list 中进行转换可能会更好。但是,全局对象可以通过遍历 unique 'subproduct' 元素的序列来创建,然后 assign 新对象('subprod1'、'subprod2' ...)关于那个特定 'subproduct'

subset 数据
un1 <- unique(dfone$subproduct)
for(i in seq_along(un1)) 
     assign(paste0('subprod', i), subset(dfone, subproduct == un1[i]))