R:在一个条件下将一个列表拆分成两个列表

时间:2018-04-04 06:41:28

标签: r list dataframe

我有一个带有20数据帧的大型列表(假设为L)。 20数据框只有两种不同的形式。他们有135行。

$foo1

     a  value
1   12  321.12
2   11  231.12 
3   10  211.15
4    9  ...
5    8  ...
6    7  ...
7    6
8    5
9    4
10   3 
11   2
12   1
13   0

$foo2

  a  value
1 4  19.52
2 3  98.91
3 2  97.67
4 1  ...
5 0  ...

我想将列表拆分为两个列表,条件如下:

具有相同行长度的所有数据帧应存储在一个列表中。因此,我想要一个包含5行的所有数据框的列表,另一个应该包含13行的所有数据框。

1 个答案:

答案 0 :(得分:0)

我们可以通过split行数来做到这一点。通过循环list创建分组变量以获取行数(' grp')

grp <- sapply(L, nrow)

然后split list&#39; L&#39;由grp

L1 <- split(L, grp)

如果我们需要list名称为&#39; month&#39;,&#39; quarter&#39;

L1 <- split(L, setNames(c("month", "quarter"), c("13", "5"))[as.character(grp)])

数据

set.seed(24)
L <- list(foo1 = data.frame(a = 1:13, value = rnorm(13)),
         foo2 = data.frame(a = 1:5, value = rnorm(5)),
         foo3 = data.frame(a = 1:13, value = rnorm(13)),
         foo4 = data.frame(a = 1:5, value = rnorm(5)))

&GT;