将不同长度的嵌套列表放入另一个数据帧中

时间:2017-11-02 16:46:03

标签: r list for-loop dataframe nested

如何将这个列表列表放在for循环中的数据框中?也就是说,如何绕过错误:

 Error in (function (..., row.names = NULL, check.rows = FALSE, check.names =  
 TRUE, : arguments imply differing number of rows: 50, 30, 20

代码:

ListA=list(firstA=1:50, secondA=1:50,thirdA=1:50)
ListB=list(firstB=1:30, secondB=1:30, thirdB=1:30)
ListC=list(firstC=1:20, secondC=1:20, thirdC=1:20)

NestedList=list(ListA,ListB,ListC)

DataToWrite=list()

for (i in 1:length(NestedList)){
    DataToWrite=c(DataToWrite,NestedList[i]) 
    }
#at the next step i get the error 
df=as.data.frame(DataToWrite)

我想要的是将for循环中的每个列表添加到前一个列表末尾的相同列中的数据帧中。我想要的在图片中看起来像: example of structure that I would like to obtain

我不关心列名,我想保留第一个列表的名称。请注意列表"列"每个列表的名称会有所不同,并且在合并到data.frame时也可能会出现问题。

1 个答案:

答案 0 :(得分:1)

喜欢这个吗?

do.call(rbind, lapply(NestedList, function(x)as.data.frame(x, col.names=c("First", "Second", "Third"))))

给出,

    First Second Third
1       1      1     1
2       2      2     2
3       3      3     3
4       4      4     4
5       5      5     5
6       6      6     6
7       7      7     7
8       8      8     8
9       9      9     9
10     10     10    10
11     11     11    11
12     12     12    12
13     13     13    13
14     14     14    14
15     15     15    15
16     16     16    16
17     17     17    17
18     18     18    18
19     19     19    19
20     20     20    20
21     21     21    21
22     22     22    22
23     23     23    23
24     24     24    24
25     25     25    25
26     26     26    26
27     27     27    27
28     28     28    28
29     29     29    29
30     30     30    30
31     31     31    31
32     32     32    32
33     33     33    33
34     34     34    34
35     35     35    35
36     36     36    36
37     37     37    37
38     38     38    38
39     39     39    39
40     40     40    40
41     41     41    41
42     42     42    42
43     43     43    43
44     44     44    44
45     45     45    45
46     46     46    46
47     47     47    47
48     48     48    48
49     49     49    49
50     50     50    50
51      1      1     1
52      2      2     2
53      3      3     3
54      4      4     4
55      5      5     5
56      6      6     6
57      7      7     7
58      8      8     8
59      9      9     9
60     10     10    10
61     11     11    11
62     12     12    12
63     13     13    13
64     14     14    14
65     15     15    15
66     16     16    16
67     17     17    17
68     18     18    18
69     19     19    19
70     20     20    20
71     21     21    21
72     22     22    22
73     23     23    23
74     24     24    24
75     25     25    25
76     26     26    26
77     27     27    27
78     28     28    28
79     29     29    29
80     30     30    30
81      1      1     1
82      2      2     2
83      3      3     3
84      4      4     4
85      5      5     5
86      6      6     6
87      7      7     7
88      8      8     8
89      9      9     9
90     10     10    10
91     11     11    11
92     12     12    12
93     13     13    13
94     14     14    14
95     15     15    15
96     16     16    16
97     17     17    17
98     18     18    18
99     19     19    19
100    20     20    20

因此,lapply遍历列表,将每个元素(即每个嵌套列表)转换为数据框,并为列提供相同的名称。 do.call然后使用rbind将这些数据框绑定在一起。