我有一个嵌套列表,我想在最深的嵌套级别上使用lapply
as.data.frame
,然后用rbindlist
(来自data.table
)将所有内容合并。这是我的数据样式:
a <- list(date="2017-01-01",ret=1:5)
b <- list(date="2017-01-02",ret=7:9)
lvl3 <- list(a,b)
lvl2 <- list(lvl3,lvl3)
lvl1 <- list(lvl2,lvl2,lvl2)
如果我只有Lvl3权限,那么我将执行以下操作,将其转换为
data.frame
并rbind
:rbindlist(lapply(lvl3,as.data.frame))
date ret
1: 2017-01-01 1
2: 2017-01-01 2
3: 2017-01-01 3
4: 2017-01-01 4
5: 2017-01-01 5
6: 2017-01-02 7
7: 2017-01-02 8
8: 2017-01-02 9
我该如何从lvl1开始,并将所有嵌套的data.frame使用rbind连接起来?以下方式不可行:
rbindlist(lapply(lvl1,as.data.frame))
期望结果包含48行:
date ret
1: 2017-01-01 1
2: 2017-01-01 2
3: 2017-01-01 3
4: 2017-01-01 4
5: 2017-01-01 5
6: 2017-01-02 7
7: 2017-01-02 8
8: 2017-01-02 9
9: 2017-01-01 1
10: 2017-01-01 2
11: 2017-01-01 3
12: 2017-01-01 4
13: 2017-01-01 5
14: 2017-01-02 7
15: 2017-01-02 8
16: 2017-01-02 9
17: 2017-01-01 1
18: 2017-01-01 2
19: 2017-01-01 3
20: 2017-01-01 4
21: 2017-01-01 5
22: 2017-01-02 7
23: 2017-01-02 8
24: 2017-01-02 9
25: 2017-01-01 1
26: 2017-01-01 2
27: 2017-01-01 3
28: 2017-01-01 4
29: 2017-01-01 5
30: 2017-01-02 7
31: 2017-01-02 8
32: 2017-01-02 9
33: 2017-01-01 1
34: 2017-01-01 2
35: 2017-01-01 3
36: 2017-01-01 4
37: 2017-01-01 5
38: 2017-01-02 7
39: 2017-01-02 8
40: 2017-01-02 9
41: 2017-01-01 1
42: 2017-01-01 2
43: 2017-01-01 3
44: 2017-01-01 4
45: 2017-01-01 5
46: 2017-01-02 7
47: 2017-01-02 8
48: 2017-01-02 9
rbindlist(lapply(lvl1,as.data.table))
是不是? - amonklvl1 %>% unlist(recursive=FALSE) %>% unlist(recursive=FALSE) %>% lapply(as.data.table) %>% rbindlist
,(结合magrittr)可以解决问题。应该有一种能够实现此目的的rapply
函数,但我无法让它正常工作。 - Frankdplyr
来实现:lapply(lvl1, function(y) lapply(y, function(x) lapply(x, data.frame) %>% rbindlist) %>% rbindlist) %>% rbindlist
。 - amatsuo_net