我有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中组织我的列表,而不是有多个单独的实例?
答案 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
是唯一具有多个值的条目,并且有一个明确的解释,即每个航班索引只有一个来源和目的地。它也可以使用具有多个值的多个变量,只要它们都包含相同数量的多个值。