Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将数据帧列表转换为时间序列_R_Dataframe - Fatal编程技术网

R 将数据帧列表转换为时间序列

R 将数据帧列表转换为时间序列,r,dataframe,R,Dataframe,我有以下由股票价格组成的数据框列表。每个数据帧可能具有不同的长度,并且并非所有日期都在每个数据帧中。我想将列表转换为一个时间序列,第一列是日期,每列是股票价格,列名是股票名称。如果给定日期的价格缺失,则采用上一个价格 $`0P00012DY5`<br/> last<br/> 2017-08-21 9.49504<br/> 2017-08-22 9.53553<br/> 2017-08-23 9.52643<br/&

我有以下由股票价格组成的数据框列表。每个数据帧可能具有不同的长度,并且并非所有日期都在每个数据帧中。我想将列表转换为一个时间序列,第一列是日期,每列是股票价格,列名是股票名称。如果给定日期的价格缺失,则采用上一个价格

$`0P00012DY5`<br/>
              last<br/>
2017-08-21 9.49504<br/>
2017-08-22 9.53553<br/>
2017-08-23 9.52643<br/>
2017-08-24 9.53486<br/>
2017-08-25 9.53390<br/>
2017-08-28 9.48788<br/>
2017-08-29 9.44059<br/>
2017-08-30 9.49893<br/>

$`0P0000KY8J`<br/>
               last<br/>
2017-08-21 11.58276<br/>
2017-08-22 11.58278<br/>
2017-08-23 11.58275<br/>
2017-08-24 11.58263<br/>
2017-08-25 11.58260<br/>
2017-08-29 11.58250<br/>
2017-08-30 11.58246<br/>
2017-08-31 11.58237<br/>
$`0P00012DY5`
最后一次
2017-08-21 9.49504
2017-08-22 9.53553
2017-08-23 9.52643
2017-08-24 9.53486
2017-08-25 9.53390
2017-08-28 9.48788
2017-08-29 9.44059
2017-08-30 9.49893
$`0P0000KY8J`
最后一次
2017-08-21 11.58276
2017-08-22 11.58278
2017-08-23 11.58275
2017-08-24 11.58263
2017-08-25 11.58260
2017-08-29 11.58250
2017-08-30 11.58246
2017-08-31 11.58237
期望输出

date    0P00012DY5      0P0000KY8J<br/>
2017-08-21  9.49504         11.58276<br/>
2017-08-22  9.53553         11.58278<br/>
2017-08-23  9.52643         11.58275<br/>
2017-08-24  9.53486         11.58263<br/>
2017-08-25  9.53390         11.58260<br/>
2017-08-28  9.48788         11.58260<br/>
2017-08-29  9.44059         11.58250<br/>
2017-08-30  9.49893         11.58246<br/>
2017-08-31  9.49893         11.58237<br/>
日期0P00012DY5 0P0000KY8J
2017-08-21 9.49504 11.58276
2017-08-22 9.53553 11.58278
2017-08-23 9.52643 11.58275
2017-08-24 9.53486 11.58263
2017-08-25 9.53390 11.58260
2017-08-28 9.48788 11.58260
2017-08-29 9.44059 11.58250
2017-08-30 9.49893 11.58246
2017-08-31 9.49893 11.58237
名单结构:

mod_ll <- structure(list(`0P00012DY5` = structure(list(last = c(9.49504, 
9.53553, 9.52643, 9.53486, 9.5339, 9.48788, 9.44059, 9.49893, 
9.542, 9.56865, 9.5417, 9.54301, 9.52942, 9.54246, 9.54653, 9.60182, 
9.63157, 9.62566, 9.64084, 9.62746, 9.65814, 9.6672, 9.66387)), .Names = "last", row.names = c("2017-08-21", 
"2017-08-22", "2017-08-23", "2017-08-24", "2017-08-25", "2017-08-28", 
"2017-08-29", "2017-08-30", "2017-08-31", "2017-09-01", "2017-09-04", 
"2017-09-05", "2017-09-06", "2017-09-07", "2017-09-08", "2017-09-11", 
"2017-09-12", "2017-09-13", "2017-09-14", "2017-09-15", "2017-09-18", 
"2017-09-19", "2017-09-20"), class = "data.frame"), `0P0000KY8J` = structure(list(
    last = c(11.58276, 11.58278, 11.58275, 11.58263, 11.5826, 
    11.58254, 11.5825, 11.58246, 11.58237, 11.58231, 11.58223, 
    11.58219, 11.58218, 11.58206, 11.58202, 11.58197, 11.58193, 
    11.58189, 11.58178, 11.58174, 11.58173, 11.58166, 11.58163
    )), .Names = "last", row.names = c("2017-08-21", "2017-08-22", 
"2017-08-23", "2017-08-24", "2017-08-25", "2017-08-28", "2017-08-29", 
"2017-08-30", "2017-08-31", "2017-09-01", "2017-09-04", "2017-09-05", 
"2017-09-06", "2017-09-07", "2017-09-08", "2017-09-11", "2017-09-12", 
"2017-09-13", "2017-09-14", "2017-09-15", "2017-09-18", "2017-09-19", 
"2017-09-20"), class = "data.frame")), .Names = c("0P00012DY5", 
"0P0000KY8J"))

mod_llA
tidyverse
基于的解决方案可以是使用
dplyr::bind_rows
组合列表中的所有数据帧。然后将
Date
Value
分为两列,并使用
tidyr::spread
wide
格式更改数据

最后,对于缺少的日期,使用
tidyr::fill
填充最后可用的值

library(tidyverse)

bind_rows(ll, .id="Name") %>% 
  separate(last, c("Date", "Value"), sep=" ") %>%
  mutate(Date = as.Date(Date)) %>%
  spread(Name, Value) %>%
  fill(2:3)

#         Date 0P0000KY8J 0P00012DY5
# 1 2017-08-21   11.58276    9.49504
# 2 2017-08-22   11.58278    9.53553
# 3 2017-08-23   11.58275    9.52643
# 4 2017-08-24   11.58263    9.53486
# 5 2017-08-25   11.58260    9.53390
# 6 2017-08-28   11.58260    9.48788
# 7 2017-08-29   11.58250    9.44059
# 8 2017-08-30   11.58246    9.49893
# 9 2017-08-31   11.58237    9.49893
编辑:更新以包括OP提供的修改数据的答案。
日期
作为
数据的行名提供。帧
。在合并数据帧之前,我们需要将
Date
移动到列中。可以使用列表中的
lappy
rownames\u移动到列中

library(tidyverse)
bind_rows(lapply(mod_ll,rownames_to_column, var="Date"), .id="Name") %>% 
  mutate(Date = as.Date(Date)) %>%
  spread(Name, last) %>%
  fill(2:3)

#         Date 0P0000KY8J 0P00012DY5
# 1  2017-08-21   11.58276    9.49504
# 2  2017-08-22   11.58278    9.53553
# 3  2017-08-23   11.58275    9.52643
# 4  2017-08-24   11.58263    9.53486
# 5  2017-08-25   11.58260    9.53390
# 6  2017-08-28   11.58254    9.48788
#
#....so on
数据:

df1 <- read.table(text =  
"last
'2017-08-21 9.49504'
'2017-08-22 9.53553'
'2017-08-23 9.52643'
'2017-08-24 9.53486'
'2017-08-25 9.53390'
'2017-08-28 9.48788'
'2017-08-29 9.44059'
'2017-08-30 9.49893'",
header = TRUE, stringsAsFactors = FALSE)


df2 <- read.table(text = 
"last
'2017-08-21 11.58276'
'2017-08-22 11.58278'
'2017-08-23 11.58275'
'2017-08-24 11.58263'
'2017-08-25 11.58260'
'2017-08-29 11.58250'
'2017-08-30 11.58246'
'2017-08-31 11.58237'",
header = TRUE, stringsAsFactors = FALSE)


ll <- list(df1, df2)

names(ll) <- c('0P00012DY5', '0P0000KY8J')

df1@marcl好极了。请删除以上聊天中的评论,因为这些评论对未来的用户没有帮助。