【问题标题】:R: Splitting one list into two lists under a conditionR:在一个条件下将一个列表拆分为两个列表
【发布时间】:2018-04-04 06:41:28
【问题描述】:

我有一个包含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 行的数据框。

【问题讨论】:

  • 试试grp <- sapply(L, nrow); split(L, grp)
  • 哇,太快了,谢谢:) 有没有办法在拆分函数中为两个列表分配名称?
  • 你想要的名字是什么?假设你有 foo1、foo3 等是 13 行,而 foo2、foo4 是 5 行,那么
  • 月(对于行长为 13 的列表)和季度(对于行长为 5 的列表)。 Acutally 我的列表有以下名称 $5$foo1 $5$foo2,....., $13$foo6..... 我想将列表存储到两个不同的变量中。为此,我首先想将这两个名称分配给两个列表
  • 更新帖子

标签: r list dataframe


【解决方案1】:

我们可以通过splitting 对行数执行此操作。通过循环list来创建分组变量以获取行数('grp')

grp <- sapply(L, nrow)

然后split list 'L' by grp

L1 <- split(L, grp)

如果我们需要 list 名称为“月”、“季度”

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)))

>

【讨论】:

    猜你喜欢
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    相关资源
    最近更新 更多