R - 数据框的嵌套列表(由于行数不同而出错)

R - nested list to data frame (err due to different no. of rows)

list"data"

我正在使用 R 为 data.I 编写代码,已经参考了很多关于主题 "Converting nested list (unequal length) to data frame" 的案例,但由于我的弱点,我不能真正适用于我的案例。让我展示一下我的案例:

我从yahoo finance 下载股票数据到列表data 如下。 我想将列表 data 转换为数据框,以便我可以进行进一步的数据处理并转换为 MySQL,但出现错误

> data1<-as.data.frame(data)
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,  : 
  arguments imply differing number of rows: 5, 6

我知道日期 2018-01-01 有一个奇数行,其数量为 "v"=0,应该在 x0004、x0011、x0012 等列表元素中删除。我可以一个一个地删除它们,但是我如何循环遍历每个元素(x0001,x0002,x0003,...)以找出音量为 "v"=0 的行,然后删除该行。就像本例一样,循环遍历数据,所以循环删除“2018-01-01”这一行。 然后每个列表的元素 (x0001,x0002,...x0012) 将有 5 条记录,因此我可以将我的列表 data 转换为数据框。有什么想法吗?

> data
$x0001
              o     h     l     c       v     a
2017-12-29 98.4 99.20 97.85 98.10 4329049 98.10
2018-01-02 98.1 99.00 98.10 98.65 3129165 98.65
2018-01-03 99.1 99.10 98.00 98.40 4186522 98.40
2018-01-04 98.8 99.35 98.45 99.10 4357990 99.10
2018-01-05 99.5 99.75 98.80 99.25 3294493 99.25

$x0002
               o     h     l     c       v     a
2017-12-29 80.20 80.30 79.95 79.95 1953362 79.95
2018-01-02 79.95 80.30 79.85 80.05 1388088 80.05
2018-01-03 79.70 80.20 79.20 79.25 2760734 79.25
2018-01-04 79.75 79.75 79.05 79.15 1978581 79.15
2018-01-05 79.00 79.75 79.00 79.75 2056660 79.75

$x0003
               o     h     l     c       v     a
2017-12-29 15.32 15.36 15.30 15.32 6870243 15.32
2018-01-02 15.32 15.34 15.26 15.30 7126123 15.30
2018-01-03 15.24 15.40 15.24 15.38 8563425 15.38
2018-01-04 15.38 15.50 15.36 15.46 8957398 15.46
2018-01-05 15.50 15.50 15.44 15.50 7193119 15.50

$x0004
               o     h     l     c        v     a
2017-12-29 26.65 27.15 26.65 27.00  5394675 27.00
2018-01-01 27.00 27.00 27.00 27.00        0 27.00
2018-01-02 27.30 27.65 27.05 27.60  5569401 27.60
2018-01-03 27.60 28.20 27.40 28.15  7607586 28.15
2018-01-04 28.40 30.65 28.30 30.60 22355894 30.60
2018-01-05 31.05 31.20 29.85 30.80  9911314 30.80

$x0005
               o     h     l     c        v     a
2017-12-29 80.00 80.15 79.90 79.95 15450760 79.95
2018-01-02 79.95 81.30 79.95 81.30 37060582 81.30
2018-01-03 81.30 81.45 80.80 80.95 21680762 80.95
2018-01-04 80.90 81.05 80.35 80.50 17205111 80.50
2018-01-05 81.05 81.20 80.60 80.80 15902273 80.80

$x0006
               o     h     l     c       v     a
2017-12-29 66.00 66.10 65.85 65.95 2195249 65.95
2018-01-02 65.95 66.30 65.85 66.10 1443995 66.10
2018-01-03 66.00 66.65 66.00 66.60 2132720 66.60
2018-01-04 66.85 66.85 66.35 66.55 1623944 66.55
2018-01-05 66.20 66.55 66.10 66.55 1368615 66.55

$x0007
              o    h    l    c       v    a
2017-12-29 0.95 0.95 0.93 0.95 2294000 0.95
2018-01-02 0.95 0.95 0.93 0.94 1206000 0.94
2018-01-03 0.93 0.93 0.92 0.93 1370000 0.93
2018-01-04 0.91 0.93 0.91 0.93  732000 0.93
2018-01-05 0.91 1.00 0.91 0.98 3446000 0.98

$x0008
              o    h    l    c       v    a
2017-12-29 4.57 4.60 4.54 4.54 3317053 4.54
2018-01-02 4.54 4.57 4.53 4.55 2948851 4.55
2018-01-03 4.58 4.58 4.55 4.56 3931057 4.56
2018-01-04 4.59 4.61 4.55 4.61 9747293 4.61
2018-01-05 4.59 4.62 4.59 4.61 5182659 4.61

$x0009
              o     h     l     c       v     a
2017-12-29 0.26 0.265 0.255 0.260  679200 0.260
2018-01-02 0.26 0.265 0.260 0.265  276000 0.265
2018-01-03 0.26 0.260 0.255 0.260  756000 0.260
2018-01-04 0.26 0.265 0.255 0.260 1626000 0.260
2018-01-05 0.26 0.265 0.260 0.265 1056400 0.265

$x0010
               o     h     l     c       v     a
2017-12-29 28.55 29.00 28.55 28.75  432109 28.75
2018-01-02 28.75 29.20 28.75 29.10  318786 29.10
2018-01-03 29.05 29.20 28.90 29.20  153600 29.20
2018-01-04 29.05 29.90 28.95 29.90  438114 29.90
2018-01-05 29.40 30.45 29.40 30.40 1714000 30.40

$x0011
               o     h     l     c      v     a
2017-12-29 194.5 194.5 193.2 194.0 739707 194.0
2018-01-01 194.0 194.0 194.0 194.0      0 194.0
2018-01-02 194.5 194.8 193.0 194.5 518446 194.5
2018-01-03 193.3 194.6 192.6 194.1 455596 194.1
2018-01-04 194.0 194.6 193.0 193.6 607241 193.6
2018-01-05 192.6 194.0 185.6 194.0 769063 194.0

$x0012
              o     h     l     c       v     a
2017-12-29 50.8 51.50 50.80 51.50 2022566 51.50
2018-01-01 51.5 51.50 51.50 51.50       0 51.50
2018-01-02 51.6 52.20 51.50 52.20 3626698 52.20
2018-01-03 52.0 52.35 51.75 52.00 2167682 52.00
2018-01-04 52.0 52.70 51.85 52.50 3557305 52.50
2018-01-05 52.5 53.45 52.25 53.45 4955568 53.45

您可以使用 tibble 包中的 rownames_to_column,然后使用 do.call 将列表转换为数据框:

do.call(rbind,lapply(data,tibble::rownames_to_column))
           rowname      o       h       l       c        v       a
x0001.1 2017-12-29  98.40  99.200  97.850  98.100  4329049  98.100
x0001.2 2018-01-02  98.10  99.000  98.100  98.650  3129165  98.650
x0001.3 2018-01-03  99.10  99.100  98.000  98.400  4186522  98.400
x0001.4 2018-01-04  98.80  99.350  98.450  99.100  4357990  99.100
x0001.5 2018-01-05  99.50  99.750  98.800  99.250  3294493  99.250
x0002.1 2017-12-29  80.20  80.300  79.950  79.950  1953362  79.950
x0002.2 2018-01-02  79.95  80.300  79.850  80.050  1388088  80.050
x0002.3 2018-01-03  79.70  80.200  79.200  79.250  2760734  79.250
x0002.4 2018-01-04  79.75  79.750  79.050  79.150  1978581  79.150
x0002.5 2018-01-05  79.00  79.750  79.000  79.750  2056660  79.750
x0003.1 2017-12-29  15.32  15.360  15.300  15.320  6870243  15.320
x0003.2 2018-01-02  15.32  15.340  15.260  15.300  7126123  15.300
x0003.3 2018-01-03  15.24  15.400  15.240  15.380  8563425  15.380
x0003.4 2018-01-04  15.38  15.500  15.360  15.460  8957398  15.460
x0003.5 2018-01-05  15.50  15.500  15.440  15.500  7193119  15.500
..............