在R中按照定义的顺序将基于组的数据帧拆分为列表

时间:2018-03-09 11:44:54

标签: r

我有简单的data.frame

ts_df <- data.frame(val=c(20,30,40,50,21,26,11,41,47,41),
                cycle=c(3,3,3,3,2,2,2,1,1,1),
                date=as.Date(c("1985-06-30","1985-09-30","1985-12-31","1986-03-31","1986-06-30","1986-09-30","1986-12-31","1987-03-31","1987-06-30","1987-09-30")))

我需要根据群组拆分ts_df但根据日期在结果列表中保留顺序

list_ts_df <- split(ts_df, ts_df$cycle)

所以而不是

> list_ts_df
$`1`
   val cycle       date
8   41     1 1987-03-31
9   47     1 1987-06-30
10  41     1 1987-09-30

$`2`
  val cycle       date
5  21     2 1986-06-30
6  26     2 1986-09-30
7  11     2 1986-12-31

$`3`
  val cycle       date
1  20     3 1985-06-30
2  30     3 1985-09-30
3  40     3 1985-12-31
4  50     3 1986-03-31

我需要输出

> list_ts_df
$`1`
  val cycle       date
1  20     3 1985-06-30
2  30     3 1985-09-30
3  40     3 1985-12-31
4  50     3 1986-03-31

$`2`
  val cycle       date
5  21     2 1986-06-30
6  26     2 1986-09-30
7  11     2 1986-12-31

$`3`
   val cycle       date
8   41     1 1987-03-31
9   47     1 1987-06-30
10  41     1 1987-09-30

有没有简单的解决方案如何实现所需的输出?非常感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

我们可以首先执行order数据集,然后通过创建splitfactor指定为levels,在'周期'上执行unique元素

t1 <- ts_df[order(ts_df$date),]
split(t1, factor(t1$cycle, levels = unique(t1$cycle)) )