在不等长度条目的R中分组列表

时间:2017-02-14 12:35:25

标签: r matlab list

我有963个列表,每个列表实例都包含相同的类型信息。但是,给定实例的任何列表中的数据的数量都可能不同。而不是创建许多列表,是否有一种有效的方法来分组列表?示例如下。

list001 <- c(originApt = 'ATL', destinApt = 'BOS', flightIndxs = c( 1 : 7 ) )
list002 <- c(originApt = 'ATL', destinApt = 'DEN', flightIndxs = c( 9 :19 ) )
:
list963 <- c(originApt = 'DCA', destinApt = 'TPA', flightIndxs = c( 8582, 8583, 8584, 8585, 8586, 8587 ) )

等等。请注意,每个列表的第三个条目中的整数长度的长度不同。在matlab中,我只是构造一个名为“flight”的结构,其中包含每个列表实例的索引。有没有办法在R中组织我的列表,而不是有多个单独的实例?

1 个答案:

答案 0 :(得分:3)

您可以创建list lists

list001 <- list(originApt = 'ATL', destinApt = 'BOS', flightIndxs = c( 1 : 7 ) )
list002 <- list(originApt = 'ATL', destinApt = 'DEN', flightIndxs = c( 9 :19 ) )
large_list = list(list001, list002)
> large_list
[[1]]
[[1]]$originApt
[1] "ATL"

[[1]]$destinApt
[1] "BOS"

[[1]]$flightIndxs
[1] 1 2 3 4 5 6 7


[[2]]
[[2]]$originApt
[1] "ATL"

[[2]]$destinApt
[1] "DEN"

[[2]]$flightIndxs
 [1]  9 10 11 12 13 14 15 16 17 18 19

列表可以包含任何其他R对象作为成员。请注意,不要将子列表构建为c(),而是使用list

您还可以创建一个长格式data.frame

do.call('rbind', lapply(large_list, function(x) as.data.frame(do.call('cbind', x))))
   originApt destinApt flightIndxs
1        ATL       BOS           1
2        ATL       BOS           2
3        ATL       BOS           3
4        ATL       BOS           4
5        ATL       BOS           5
6        ATL       BOS           6
7        ATL       BOS           7
8        ATL       DEN           9
9        ATL       DEN          10
10       ATL       DEN          11
11       ATL       DEN          12
12       ATL       DEN          13
13       ATL       DEN          14
14       ATL       DEN          15
15       ATL       DEN          16
16       ATL       DEN          17
17       ATL       DEN          18
18       ATL       DEN          19

请注意,这只有效,因为flightIndxs是唯一具有多个值的条目,并且有一个明确的解释,即每个航班索引只有一个来源和目的地。它也可以使用具有多个值的多个变量,只要它们都包含相同数量的多个值。